我很抱歉我的新手问题,但我对 C++ 不太了解。任何人都可以回答为什么我在编译以下代码时收到错误“错误:对构造函数的调用不能出现在常量表达式中”;
class EliminationWeight
{
public:
typedef double Type;
static const Type MAX_VALUE = __DBL_MAX__;
static const Type MIN_VALUE = -__DBL_MAX__;
};
我使用 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__;
^ ~~~~~~~~~~~
无论如何,在类主体中初始化 double 是非标准的。您应该单独进行初始化:
class EliminationWeight
{
public:
typedef double Type;
static const Type MAX_VALUE;
static const Type MIN_VALUE;
};
然后在一个源文件(不是头文件)中:
const EliminationWeight::Type EliminationWeight::MAX_VALUE = __DBL_MAX__;
const EliminationWeight::Type EliminationWeight::MIN_VALUE = -__DBL_MAX__;
一般来说,只能在类体中初始化具有整型类型的静态成员变量,尽管这已在 C++ 0x11 中进行了扩展。也可以看看在 C++ 中的类声明中初始化 const 成员
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)