2012-02-04 46 views
0

我在聲明一個需要一些公共常量的類。我的想法是,宣佈的人就像這樣:聲明浮點常量的錯誤

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文件鏈接的常量類成員。

使用宏可能是一個選項,但宏沒有命名空間,我不喜歡全局定義的常量。

+1

請參閱 2012-02-04 06:49:41

+1

看到這篇文章的第一個(接受)答案:http://stackoverflow.com/questions/370283/why-cant-i-have-a-non-integral-static-const-member-in-a-class – 2012-02-04 06:49:54

+0

你可以在類中初始化靜態常量。 – Pubby 2012-02-04 06:49:58

回答

2

一般規則是你不能在類聲明中定義常量。

然後,有一個例外,積分常數無論如何。所以int常數不是規則,而是例外。

+0

謝謝。評論中提供的鏈接給了我明確的答案。 – real4x 2012-02-04 21:53:57