繁体   English   中英

C ++ 98如何在标头中初始化静态结构数组

[英]C++98 how to initialise static struct array in header

[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 typedef enum BodyPoints ,它枚举我正在控制的对象上的兴趣点。 (在此库中声明)
2)Point3D <double> (从另一个头文件中包含)

该库提供了一个BodyPoints的预定义数组,该数组对于使用它的模块是全局的。

因此,在声明该结构之后,我要声明一个数组变量。 但是,我收到一个错误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) )
};

如何为结构数组创建构造函数,以及在代码中的哪个位置执行该操作? (此外,我不想在这里使用向量。)

警告并不意味着您必须添加一个全局构造函数,它意味着您在初始化全局变量时声明了需要构造函数调用的全局变量。 编译器只是在警告它们正在main()之前,整个程序初始化之前在该上下文中运行。

这本身不是问题,尽管全局初始化的顺序对于跨翻译单元的依赖关系可能会出现问题,并且它们可能会减慢程序的启动速度。

您可以禁用警告-Wno-global-constructors。

另一个建议是制作一个返回静态本地数据的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM