我尝试使用成员初始化列表初始化静态成员变量。但我得到了像
这样的错误静态变量无法通过构造函数
初始化
例如,我的班级sample
有一个y
类型的静态成员变量int
。我无法做到这一点:
sample(int a):y(a){}
为什么会这样?
答案 0 :(得分:3)
静态成员变量不属于您的类的单个实例。因此,当构造函数(初始化实例的函数)运行时,静态成员已经初始化。你无法再次初始化它。
但是你可以在构造函数体中分配它:
sample(int a) {y = a;}
虽然这很少有用。
再次,请记住:每次构造函数运行时,它都会构造一个实例,而静态成员则存在于所有实例中。
答案 1 :(得分:0)
静态成员是每个类,而不是每个实例,因此静态成员只能在程序的生命周期中构造一次。每次创建类的实例时都会调用构造函数。
您要做的是初始化将在其中使用的.cc文件中的静态成员。
类似的东西:
// Foo.h
class Bar {
public :
Bar(int) {
}
};
class Foo {
public:
static Bar MrStatic;
};
// Foo.cc
Bar Foo::MrStatic(10);