给定 C++ 语言的代码
/* file xxx.hpp */
class A
{
};
class B
{
private:
class C
{
static const A a;
};
};
如何初始化A a
嵌套类 C 中的静态常量成员变量?
给定 C++ 语言的代码
/* file xxx.hpp */
class A
{
};
class B
{
private:
class C
{
static const A a;
};
};
如何初始化A a
嵌套类 C 中的静态常量成员变量?
将以下内容添加到恰好一个.cpp
:
const A B::C::a;
请注意,发布的代码只是一个声明:这是实际的定义和初始化。
在包含要编译的代码的 cpp 文件中,您应该添加const A B::C::a = {};
. 初始值设定项(对于 POD 类或聚合类型的 {...} 中的初始值设定项列表或内置类型的单个常量值)是可选的 - 如果未指定,将为a
. 在原始类型的情况下,它应该设置为 0。
更新:
正如 David 在下面所说的那样,当没有为静态成员定义指定初始化程序时,一些编译器会发出警告。如果有一些数据成员class A
并且在定义的过程中没有指定初始化a
器,我的 g++ 4.6.3 编译器会发出以下警告(默认情况下被视为错误):
test.cpp:26:9:错误:未初始化的 const 'B::C::a' [-fpermissive]
test.cpp:6:7: 注意:'const class A' 没有用户提供的默认值
构造函数 test.cpp:11:8: 注意:并且隐式定义的构造函数不会初始化 'int A::test'</p>
就像您会成为普通static
会员一样。
在您的实现文件中:
const A B::C::a;
静态成员变量的初始化总是在变量的定义中执行,它必须在程序中的单个翻译单元中:
const A B::C::a = {};
在源文件 (xxx.cpp) 中,定义变量:
const A B::C::a;