2012-02-04 5 views
0

いくつかのpublic定数が必要なクラスを宣言しています。私の考えはちょうどこのようなものを宣言した浮動小数点定数を宣言する際のエラー

class MyClass { 
public: 
    const int kIntConst = 1234; 
    const float kFloatConst = 1234.567f; 
    // ...methods... 
}; 

このアプローチは、int定数の細かい動作しますが、次のエラーでfloat 1で失敗した:

error C2864: 'MyClass::kFloatConst' : only static const integral data members can be initialized within a class 

まあ、私ははこのエラーを理解してメッセージ。私は、クラス宣言で宣言された浮動小数点定数(非整数)を持つことはできないと言います。だから、問題は:なぜ?なぜそれがintになることができますが、floatではありませんか?

私はこれを回避する方法を知っています。 kFloatConstを静的なconstメンバーとして宣言し、.cppで後で初期化すると問題は解決しますが、これは私が望むものではありません。 コンパイル時間定数(コンパイラによって最適化できるもの)が必要であり、.objファイルのリンクが必要な定数クラスメンバではありません。

マクロを使用することはできますが、マクロには名前空間がなく、グローバルに定義された定数が好きではありません。

+1

+1

この投稿の最初の(受け入れられる)回答を参照してください:http://stackoverflow.com/questions/370283/in-class-non-integral-static-const-member-in-a-class –

+0

静的constをクラス内で初期化することができます。 – Pubby

答えて

2

一般的な規則として、クラス宣言内に定数を定義することはできません。

次に、整数定数は、とにかく許可されているであるという例外があります。だからint定数はルールではなく例外です。

+0

ありがとうございます。コメントの中で提供されるリンクは私にはっきりとした答えを与えました – real4x

関連する問題