静态类型的初始化顺序

时间:2015-09-28 09:03:50

标签: c++ c++11

我试图用另一个类的静态成员初始化一个类的静态成员。但我猜是因为一些未定义的'原因,当初始化发生时,初始化程序尚未实例化。因为实例化的顺序,数据没有被复制。

这就是它的样子,

/* class1.h */
#include "class2.h"

class class1 {
public:
    static const int x;
    static int init()
    {
        return class2::y;
    }
}; 

/* class1.cpp */
const int class::x = class1::init();

/* class2.h */
struct class2 {
    static const int y;
};

/* class2.cpp */
const int class2::y = 5;

这是我目的的粗略定义。正如您所看到的,我正在尝试使用函数调用初始化class1的静态数据成员,该函数调用返回另一个类的静态数据成员。正如我所期望的那样,不是使用函数调用初始化class1的数据成员,而是将其初始化为'。

我猜它正在发生,因为没有任何静态类型变量执行顺序的规范。

有没有办法解决它?

谢谢

1 个答案:

答案 0 :(得分:1)

除了这是否是好设计的问题;你的问题的答案很简单:你的定义

const int class2::y = 5;

应该之前

const int class::x = class1::init();

所以让它运行起来的一种方法是保留标题,但在文件 class1.cpp 中加上这两行

/* class1.cpp */
const int class2::y = 5;
const int class1::x = class1::init();