给出C ++语言中的代码
/* file xxx.hpp */
class A
{
};
class B
{
private:
class C
{
static const A a;
};
};
如何在嵌套类C?
中初始化静态常量成员变量A a
答案 0 :(得分:5)
将以下内容添加到一个.cpp
:
const A B::C::a;
请注意,发布的代码只是声明:这是实际的定义和初始化。
答案 1 :(得分:4)
在包含要编译的代码的cpp文件中,您应该添加const A B::C::a = {};
。
初始化程序(对于POD类或聚合类型的{...}中的初始化程序列表或内置类型的单个常量值)是可选的 - 如果未指定,则将为{{1}调用默认构造函数}。如果是基本类型,则应将其设置为0.
<强>更新强>
正如David在下面提到的那样,当没有为静态成员定义指定初始化程序时,某些编译器会发出警告。如果a
中有一些数据成员且在定义class 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'
答案 2 :(得分:3)
与常规static
成员一样。
在您的实施文件中:
const A B::C::a;
答案 3 :(得分:3)
静态成员变量的初始化始终在变量的定义中执行,该变量必须位于程序中的单个翻译单元中:
const A B::C::a = {};
答案 4 :(得分:3)
在源文件(xxx.cpp)中,定义变量:
const A B::C::a;