我想初始化静态struct std_msgs :: ColorRGBA。 不幸的是它没有构造函数来初始化它的4个float成员,因为它不是我自己的类,所以我无法修改它的构造函数。
class A {
static std_msgs::ColorRGBA white; // struct with 4 float members;
};
如何初始化静态成员白色?我不能使用c ++ 11
我试过
std_msgs::ColorRGBA A::white = { 1.0f, 1.0f, 1.0f, 1.0f};
结构看起来像:
template <class T>
struct ColorRGBA_ {
typedef ColorRGBA_<T> Type;
ColorRGBA_(): r(0.0), g(0.0), b(0.0), a(0.0) { }
ColorRGBA_(const ContainerAllocator& _alloc) : r(0.0), g(0.0) , b(0.0), a(0.0) { }
typedef float _r_type;
_r_type r;
typedef float _g_type;
_g_type g;
typedef float _b_type;
_b_type b;
typedef float _a_type;
_a_type a;
typedef boost::shared_ptr< ::std_msgs::ColorRGBA_<ContainerAllocator> > Ptr;
typedef boost::shared_ptr< ::std_msgs::ColorRGBA_<ContainerAllocator> const> ConstPtr;
boost::shared_ptr<std::map<std::string, std::string> > __connection_header;
};
最好的问候
答案 0 :(得分:1)
您可以执行初始化功能(例如,ColorRGBA_init
),如下例所示:
#include <iostream>
namespace std_msgs {
struct ColorRGBA {
double r;
double g;
double b;
double a;
};
}
std_msgs::ColorRGBA ColorRGBA_init(double const r = 1.0, double const g = 1.0, const double b = 1.0, double const a = 1.0) {
std_msgs::ColorRGBA out;
out.r = r;
out.g = g;
out.b = b;
out.a = a;
return out;
}
class A {
public:
static std_msgs::ColorRGBA white; // struct with 4 float members;
};
std_msgs::ColorRGBA A::white = ColorRGBA_init();
int main() {
std::cout << A::white.r << std::endl;
}
答案 1 :(得分:1)
为该类型编写任何init函数,例如:
std_msgs::ColorRGBA GenerateColorRGBA() {
std_msgs::ColorRGBA color;
color.r = 1.0f;
color.g = 1.0f;
color.b = 1.0f;
color.a = 1.0f;
return color;
}
std_msgs::ColorRGBA A::white = GenerateColorRGBA();
答案 2 :(得分:1)
不知道为什么该结构被模板化或需要像那样声明,因为它不是 aggregate 而你不能初始化列表初始化它,您应该使用初始化函数或方法,如下所示
#include <iostream>
using namespace std;
namespace std_msgs {
template <class T>
struct ColorRGBA_ {
typedef ColorRGBA_<T> Type;
ColorRGBA_(): r(0.0), g(0.0), b(0.0), a(0.0) { }
//ColorRGBA_(const ContainerAllocator& _alloc) : r(0.0), g(0.0) , b(0.0), a(0.0) { }
typedef float _r_type;
_r_type r;
typedef float _g_type;
_g_type g;
typedef float _b_type;
_b_type b;
typedef float _a_type;
_a_type a;
/*typedef boost::shared_ptr< ::std_msgs::ColorRGBA_<ContainerAllocator> > Ptr;
typedef boost::shared_ptr< ::std_msgs::ColorRGBA_<ContainerAllocator> const> ConstPtr;
boost::shared_ptr<std::map<std::string, std::string> > __connection_header;*/
};
typedef ColorRGBA_<float> ColorRGBA;
}
class A {
public:
static std_msgs::ColorRGBA white; // struct with 4 float members;
};
// std_msgs::ColorRGBA A::white = {1.0f,1.0f,1.0f,1.0f}; // Just works for aggregates
std_msgs::ColorRGBA initializeMe() {
std_msgs::ColorRGBA obj;
obj.r = 22.0f;
// ..
return obj;
}
std_msgs::ColorRGBA A::white = initializeMe();
int main()
{
cout << A::white.r;
}