静态数据成员的定义

时间:2015-06-19 04:33:42

标签: c++ static-members

我正在阅读Scott Meyers的C ++并且遇到了这个例子:

class GamePlayer{
private:
    static const int NumTurns = 5;
    int scores[NumTurns];
    // ...
};
  

您在上面看到的是NumTurns的声明,而不是定义。

为什么不定义?看起来我们用5初始化静态数据成员。

我只是不明白声明是什么意思但没有定义一个值为5的变量。我们可以把变量的地址变好。

class A
{
public:
    void foo(){ const int * p = &a; }
private:
    static const int a = 1;
};

int main ()
{
    A a;
    a.foo();
}

DEMO

2 个答案:

答案 0 :(得分:2)

因为它不是定义。必须在类定义之外定义静态数据成员。

[class.static.data] / 2

  

在其类定义中声明static数据成员不是   定义,除了cv-qualified之外,可能是不完整的类型   voidstatic数据成员的定义应出现在   命名空间范围包含成员的类定义。

至于获取静态成员的地址而不实际定义它,它将编译,但不应该链接。

答案 1 :(得分:1)

您需要在源文件中添加NumTurns的定义,例如

const int GamePlayer::NumTurns;