我试图用另一个类的静态成员初始化一个类的静态成员。但我猜是因为一些未定义的'原因,当初始化发生时,初始化程序尚未实例化。因为实例化的顺序,数据没有被复制。
这就是它的样子,
/* 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的数据成员,而是将其初始化为'。
我猜它正在发生,因为没有任何静态类型变量执行顺序的规范。
有没有办法解决它?
谢谢
答案 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();