我最近遇到了Visual C++ 2005无法在类常量中初始化的问题,因为我遇到了普遍存在的错误
"error C2864:...:在类中只能初始化静态常量整型数据成员“
从类似于
class MyClass:
{
private:
static const double myConstant = 2.9768;
}我已经知道非整数类型是问题所在,有几种方法可以获得整数常量,但我还没有找到一种令人满意的解决方法来定义一个类范围内的常量。这种类型的声明在以后的/其他编译器中合法吗?
发布于 2012-02-03 06:33:51
在类定义之外,在源文件(不是头文件)中执行此操作,否则可能会出现链接器错误。
const double MyClass::myConstant = ..;
这种行为是由C++语言标准强制执行的。没有法律上的解决办法。
发布于 2012-02-03 06:36:35
在C++03中,您必须在类定义之外初始化非整数静态常量:
struct Foo
{
static const double value;
};
const double Foo::value = 0.5;在C++11中,您可以从常量表达式内联初始化任意constexpr会话:
struct Foo
{
static constexpr double value = 0.5;
};您可能仍然需要为变量提供定义,也可能不需要,这取决于您是否在代码中的其他地方需要它(例如,通过获取它的地址)。
发布于 2012-02-03 06:33:37
从头文件中取出初始化,并将其放入.cpp中:
const double MyClass::myConstant = 2.9768;https://stackoverflow.com/questions/9121015
复制相似问题