2

给定 C++ 语言的代码

/* file xxx.hpp */

class A
{
};

class B
{
private:
    class C
    {
        static const A a;
    };
};

如何初始化A a嵌套类 C 中的静态常量成员变量?

4

5 回答 5

5

将以下内容添加到恰好一个.cpp

const A B::C::a;

请注意,发布的代码只是一个声明:这是实际的定义和初始化。

于 2012-08-01T21:44:13.463 回答
4

在包含要编译的代码的 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>

于 2012-08-01T21:44:29.403 回答
3

就像您会成为普通static会员一样。

在您的实现文件中:

const A B::C::a;
于 2012-08-01T21:42:52.517 回答
3

静态成员变量的初始化总是在变量的定义中执行,它必须在程序中的单个翻译单元中:

const A B::C::a = {};
于 2012-08-01T21:43:50.577 回答
3

在源文件 (xxx.cpp) 中,定义变量:

const A B::C::a;
于 2012-08-01T21:44:04.260 回答