いくつかの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ファイルのリンクが必要な定数クラスメンバではありません。
マクロを使用することはできますが、マクロには名前空間がなく、グローバルに定義された定数が好きではありません。
この投稿の最初の(受け入れられる)回答を参照してください:http://stackoverflow.com/questions/370283/in-class-non-integral-static-const-member-in-a-class –
静的constをクラス内で初期化することができます。 – Pubby