初始化私有静态成员?

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

在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;

这是因为foo::i在你的程序中只能有一个实例。这extern int i在头文件和int i源文件中是相当的。

对于一个常数,你可以把这个值直接放在类声明中:

class foo
{
private:
    static int i;
    const static int a = 42;
};
最爱开车啦互联网的敏感者回答于

类声明应该在头文件中(或者如果不共享,则在源文件中)。

文件:foo.h

class foo
{
    private:
        static int i;
};

但是初始化应该在源文件中。

文件:foo.cpp

int foo::i = 0;

如果初始化位于头文件中,则包含头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,你将得到链接器错误,因为初始化变量的代码将在多个源文件中定义。

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

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

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • 拉布拉多拉不多

    1 粉丝0 提问2 回答
  • 小书虫

    0 粉丝1 提问2 回答

扫码关注云+社区

领取腾讯云代金券