我想有一个自己有静态成员的类,但我无法想象如何做到这一点 . 这甚至可能吗?
我收到错误:
只能在类中初始化静态const积分数据成员
码:
namespace misc
{
class CData
{
public:
CData( ) { };
CData( int d );
CData& operator = ( const CData& d );
static const CData FIRST = CData( 512 ); //how?
private:
int data;
};
}
因为我使用 FIRST
很多,我想使用 misc::CData::FIRST
静态访问它,而不需要在范围内的某处声明它 . 这有可能吗?
3 回答
不,如果没有声明它(你已经尝试在你的类声明中做),它是不可能的 . 你可能意味着,没有在你的类声明之外定义它 . 答案是否定的 .
你必须为这种情况分离声明和定义(它只适用于基本的整数类型,如
int
来直接在类声明中初始化它们) .首先在类声明中有一个简单的声明(通常类似
CData.hpp
)然后在一个单独的编译单元中定义它(通常类似于
CData.cpp
)对于非整数数据,这样的东西是首选的,因为它避免了static initialization fiasco.
没有 .
C标准n3337 § 9.4.2 / 2
静态数据成员
您可以在类中声明一个静态数据成员:
并在(确切地)其中一个.cpp文件中定义它:
这是首选解决方案,但您需要在课程中使用此定义 . 如果它是一个整数类型,你可以在类中定义该成员
C标准n3337 § 9.4.2 / 3说