在 C++ 中初始化私有静态数据成员的最佳方法是什么?我在我的头文件中尝试了这个,但它给了我奇怪的链接器错误:
class foo { private: static int i; }; int foo::i = 0;
我猜这是因为我无法从类外初始化私有成员。那么最好的方法是什么?
类声明应该在头文件中(如果不共享,则在源文件中)。 文件:foo.h
class foo { private: static int i; };
但是初始化应该在源文件中。 文件:foo.cpp
int foo::i = 0;
如果初始化在头文件中,则包含头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,您将收到链接器错误,因为初始化变量的代码将在多个源文件中定义。的初始化static int i必须在任何函数之外完成。
static int i
注意: Matt Curtis:指出如果静态成员变量是 const int 类型(例如int, bool, char),C++ 允许对上述内容进行简化。然后,您可以直接在头文件的类声明中声明和初始化成员变量:
int
bool
char
class foo { private: static int const i = 42; };