Warm tip: This article is reproduced from serverfault.com, please click

initialization-如何在 C++ 中初始化私有静态成员?

(initialization - How to initialize private static members in C++?)

发布于 2008-10-09 03:34:35

在 C++ 中初始化私有静态数据成员的最佳方法是什么?我在头文件中尝试过这个,但它给了我奇怪的链接器错误:

class foo
{
    private:
        static int i;
};

int foo::i = 0;

我猜这是因为我无法从类外部初始化私有成员。那么最好的方法是什么?

Questioner
Jason Baker
Viewed
0
702 2019-10-27 01:41:53

类声明应在头文件中(如果未共享,则在源文件中)。
文件:foo.h

class foo
{
    private:
        static int i;
};

但是初始化应该在源文件中。
文件:foo.cpp

int foo::i = 0;

如果初始化在头文件中,那么包含头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,你将收到链接器错误,因为初始化变量的代码将在多个源文件中定义。的初始化static int i必须在任何函数之外完成。

注意: Matt Curtis:指出如果静态成员变量是 const int 类型(例如int, bool, char,C++ 允许简化上述内容然后可以直接在头文件的类声明中声明和初始化成员变量:

class foo
{
    private:
        static int const i = 42;
};