静态数据成员的定义
Definition of the static data member
我正在阅读斯科特·迈耶斯(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();
}
演示
因为它不是一个定义。静态数据成员必须在类定义之外定义。
[类.静态.数据]/2
static
数据成员在其类定义中的声明不是 定义,可能属于不符合 CV 标准的不完整类型void
.static
数据成员的定义应出现在 包含成员的类定义的命名空间范围。
至于获取静态成员的地址而不实际定义它,它会编译,但它不应该链接。
您需要在源文件中放置NumTurns
的定义,例如
const int GamePlayer::NumTurns;
相关文章:
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 何时需要定义类的静态数据成员 (un/-)
- 类模板静态数据成员定义/声明/初始化
- 在类定义和使用静态数据之外定义私有成员函数
- 现在允许重新定义 constexpr 静态数据成员吗?(但不是内联常量)?
- 如何使用自定义比较器初始化类数据成员,该成员是 std::set
- 为什么必须在C++中定义静态数据成员?
- 定义 constexpr 静态数据成员
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 类定义中的静态数据成员初始化
- 静态const数据成员在另一个文件中定义
- 在模板类中定义模板类的静态数据成员
- 为什么在静态数据成员初始化器中未完全定义类
- 是非静态数据成员错误的CPPReference定义
- 非静态数据成员和一个定义规则
- 为具有许多数据成员的结构定义 == 和<
- 在C++中,"static initialization fiasco"是否仅影响对另一个模块中定义的对象的数据成员的引用?
- C++:如何将数据成员定义为 const