我最近遇到了Visual C ++ 2005,无法在类常量中初始化,遇到无处不在的错误
“错误C2864:...:只能在类”
中初始化静态const积分数据成员来自类似
的代码class MyClass:
{
private:
static const double myConstant = 2.9768;
}
我已经能够发现非整数类型是问题,并且有几种方法可以使用整数常量,但是我没有找到一个令人满意的解决方法来定义作用于类的常量。这种类型的声明在后期/其他编译器中是否合法?
答案 0 :(得分:8)
在C ++ 03中,你必须在类定义之外初始化非整数静态常量:
struct Foo
{
static const double value;
};
const double Foo::value = 0.5;
在C ++ 11中,您可以从内联的常量表达式初始化任意constexpr
个会话:
struct Foo
{
static constexpr double value = 0.5;
};
您可能需要或可能不需要为变量提供定义,具体取决于您是否在代码中的其他位置(例如,通过获取其地址)。
答案 1 :(得分:4)
在类定义之外,在源文件中(不是标题,或者冒着链接器错误的风险)执行此操作。
const double MyClass::myConstant = ..;
此行为是由C ++语言标准强制执行的。没有法律解决方法。
答案 2 :(得分:1)
从头文件中取出初始化并将其放入.cpp:
const double MyClass::myConstant = 2.9768;