我在聲明一個需要一些公共常量的類。我的想法是,宣佈的人就像這樣:聲明浮點常量的錯誤
class MyClass {
public:
const int kIntConst = 1234;
const float kFloatConst = 1234.567f;
// ...methods...
};
這種方法工作正常int
不變,但失敗了float
一個具有以下錯誤:
error C2864: 'MyClass::kFloatConst' : only static const integral data members can be initialized within a class
嗯,我做瞭解此錯誤信息。它說我不能在類聲明中聲明一個float(非整數)常量。所以,問題是:爲什麼!?爲什麼它可以是int
但不是float
?
我知道如何解決這個問題。聲明kFloatConst
爲靜態const成員,後來在.cpp中初始化解決了這個問題,但這不是我想要的。我需要一個編譯時間常量(可以通過編譯器優化的一個),而不是需要.obj文件鏈接的常量類成員。
使用宏可能是一個選項,但宏沒有命名空間,我不喜歡全局定義的常量。
請參閱 –
2012-02-04 06:49:41
看到這篇文章的第一個(接受)答案:http://stackoverflow.com/questions/370283/why-cant-i-have-a-non-integral-static-const-member-in-a-class – 2012-02-04 06:49:54
你可以在類中初始化靜態常量。 – Pubby 2012-02-04 06:49:58