C++ 声明浮点常量时出错

C++ 声明浮点常量时出错,c++,visual-c++,C++,Visual C++,我正在声明一个需要一些公共常量的类。我的想法是这样宣布: class MyClass { public: const int kIntConst = 1234; const float kFloatConst = 1234.567f; // ...methods... }; 此方法适用于int常量,但不适用于float常量,错误如下: error C2864: 'MyClass::kFloatConst' : only static const integral data mem

我正在声明一个需要一些公共常量的类。我的想法是这样宣布:

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
嗯,我确实理解这个错误消息。它说我不能在类声明中声明浮点(非整数)常量。所以,问题是:为什么!?为什么它可以是
int
,但不能是
float

我知道如何解决这个问题。将
kFloatConst
声明为静态const成员,然后在.cpp中进行初始化可以解决问题,但这不是我想要的。我需要一个编译时常量(一个可以由编译器优化的常量),而不是需要.obj文件链接的常量类成员


可以选择使用宏,但宏没有名称空间,我不喜欢全局定义的常量。

一般规则是,不能在类声明中定义常量


还有一个例外,即无论如何都允许使用整型常量。因此,
int
常量不是规则,而是例外。

请参阅本文的第一个(被接受的)答案:您可以在类中初始化静态常量。请特别参阅Andreas Brinck的答案。@Pubby我在问题中提到了这个解决方法。我不能接受这种做法。