【发布时间】:2012-03-16 21:25:00
【问题描述】:
- 为什么当我没有将值初始化为静态成员变量时编译器会给我一个错误?不应该初始化为0吗?
- 为什么我必须在类外初始化成员变量? (这是非法的,因为如果这样做,并在主函数中更改此静态成员变量的值并创建此 clas 的对象,它会将静态 mamber 变量重新分配给旧值)而 const 静态成员在类中初始化变量是合法的(这是可能的,因为无论如何您都无法更改此静态成员变量的值)?
错误:未定义对 class_name::a 的引用
【问题讨论】:
-
你能发布一些代码和编译器错误吗?
-
@hmjd : 未定义对 class_name::a 的引用
-
注意:这是 linker 给你的错误,而不是编译器。这与在标头中将(免费)全局变量声明为
extern但实际上并未在 .cpp 文件中定义它的效果相同。全局变量必须具有所有编译单元都知道的一致内存位置,否则它们将看不到彼此对其值的更改。因此,它必须具有外部链接并且只定义一次。它不类似于static(编译单元本地)变量。 -
@pmjordan : 不是链接器,错误是在编译期间。
-
未定义的引用 通常是链接器错误。如果您使用的是 IDE,您可能没有意识到编译已经完成并且正在进入链接。