2012-02-02 25 views
2

我最近碰到的Visual C++ 2005中失敗類的常量來初始化,已經運行到了無處不在的錯誤如何初始化類內浮點常量?

「錯誤C2864:...:只有靜態常量整型數據成員可以在類中被初始化」

從類似的代碼

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

我已經能夠弄清楚,非整數類型的問題,有幾種方法有整型常量,但我還沒有找到一個滿意的工作 - 用於定義範圍爲類的常量。這種類型的聲明在後來的/其他編譯器中是合法的嗎?

回答

4

做它的類定義之外,在源文件(不是頭,否則就會出現鏈接錯誤)。

const double MyClass::myConstant = ..;

此行爲是由C++語言標準規定的。沒有法律解決方法。

1

就拿出來初始化的頭文件,並把這個到您的.cpp:

const double MyClass::myConstant = 2.9768; 
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; 
}; 

您可能會或可能不會仍然要爲變量提供了一個定義,這取決於您是否需要在你的代碼的其他地方(利用其地址EG)。

+0

+1對於Cpp11的說明。 – 2012-02-02 22:37:32