我很抱歉我的新手问题,但我对C++知之甚少.任何人都可以回答为什么我在编译下面的代码时得到错误"错误:对构造函数的调用不能出现在常量表达式中";
class EliminationWeight
{
public:
typedef double Type;
static const Type MAX_VALUE = __DBL_MAX__;
static const Type MIN_VALUE = -__DBL_MAX__;
};
Run Code Online (Sandbox Code Playgroud)
我使用Ubuntu 12.04和随附的gcc.这不是我的代码,我知道这个代码可能100%正常工作(可能在旧版本的gcc或其他编译器中).有没有快速解决方法?
在此先感谢您的回答,这实际上是我第一次问SO.
Call to a constructor cannot appear in a constant-expression是一个GCC错误消息,这对我来说真的没有意义.例如,Clang接受您的代码并发出一些警告:
test.cpp:31:23: warning: in-class initializer for static data member of type
'const Type' (aka 'const double') is a GNU extension [-Wgnu]
static const Type MAX_VALUE = __DBL_MAX__;
^ ~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
无论如何,在类体中初始化double是非标准的.你应该单独进行初始化:
class EliminationWeight
{
public:
typedef double Type;
static const Type MAX_VALUE;
static const Type MIN_VALUE;
};
Run Code Online (Sandbox Code Playgroud)
然后在一个源文件(不是头文件)中:
const EliminationWeight::Type EliminationWeight::MAX_VALUE = __DBL_MAX__;
const EliminationWeight::Type EliminationWeight::MIN_VALUE = -__DBL_MAX__;
Run Code Online (Sandbox Code Playgroud)
通常,您只能在类体中初始化具有整数类型的静态成员变量,尽管这已在C++ 0x11中进行了扩展.另请参见在C++中的类声明中初始化const成员