如何初始化类内浮点常量?

时间:2012-02-02 22:32:14

标签: c++ visual-c++

我最近遇到了Visual C ++ 2005,无法在类常量中初始化,遇到无处不在的错误

“错误C2864:...:只能在类”

中初始化静态const积分数据成员

来自类似

的代码
class MyClass:
{
private:
   static const double myConstant = 2.9768;
}

我已经能够发现非整数类型是问题,并且有几种方法可以使用整数常量,但是我没有找到一个令人满意的解决方法来定义作用于类的常量。这种类型的声明在后期/其他编译器中是否合法?

3 个答案:

答案 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;