[OSX 10.12.6,LLVM Clang ++ 9.0]
我需要将用C ++ 11编写的库(使用初始化列表)转换为C ++ 03格式(或更早版本)。该库是3D模型的仅标题实现。在库中,我有一个包含许多属性的结构,这些属性本身就是自定义类。
struct BodyPoint {
BodyPoints name;
Point3D<double> orientation;
Point3D<double> offset;
BodyPoint() {}
BodyPoint(BodyPoints _name, Point3D<double> _orientation, Point3D<double> _offset):
name(_name), orientation(_orientation), offset(_offset) {}
};
1)BodyPoints是一个typedef enum BodyPoints
,它列举了我正在控制的对象的兴趣点。 (在此库中声明)
2)Point3D&lt; double&gt; (包含在其他标题中)
该库提供了一个预定义的BodyPoints数组,它对使用它的模块是全局的。
因此,在声明struct之后,我声明了一个数组变量。但是,我收到错误declaration requires a global constructor [-Werror,-Wglobal-constructors]
我的数组声明如下:
static BodyPoint bodyPoints[2] =
{
BodyPoint(bWorld,Point3D<double>(0.0,0.0,0.0), Point3D<double>(0.00,0.00,0.00) ),
BodyPoint(bHead, Point3D<double>(0.0,0.0,0.0), Point3D<double>(0.00,0.00,0.00) )
};
如何为结构数组创建构造函数,在我的代码中我会这样做? (另外,我不想在这里使用向量。)
答案 0 :(得分:0)
警告并不意味着您必须添加全局构造函数,这意味着您在初始化全局变量时声明需要构造函数调用的全局变量。编译器只是在整个程序初始化之前,在main()之前警告它们正在该上下文中运行。
这本身并不是问题,但全局初始化的顺序可能会出现交叉翻译单元依赖性问题,并且可能会减慢程序的启动速度。
您可以禁用警告-Wno-global-constructors。
另一个建议是创建一个返回静态本地数据的函数。