当我为项目make build运行DeSiNe时,我得到了错误:a call to a constructor cannot appear in a constant-expression
$ make build
mkdir -m 755 -p obj/Algorithm
g++ -Wall -DNO_TIMER -DNO_TRACES -O3 -funroll-loops -finline-functions -fexpensive-optimizations -Isrc -o obj/Algorithm/Algorithm.o -c src/Algorithm/Algorithm.cpp
src/Network/Link.h:44:42: error: a call to a constructor cannot appear in a constant-expression
static const double METRIC_MIN = 1.0/DBL_MAX; // to prevent metric to be 0
^
src/Network/Link.h:45:38: error: a call to a constructor cannot appear in a constant-expression
static const double METRIC_MAX = DBL_MAX;
^根据对构造函数的调用不能出现在常量表达式中。,如果我在Network\Link.h中更改代码,则Network\Link.h中的类定义将从
static const double METRIC_MIN = 1.0/DBL_MAX; // to prevent metric to be 0
static const double METRIC_MAX = DBL_MAX;至
static const double METRIC_MIN; // to prevent metric to be 0
double METRIC_MIN = 1.0/DBL_MAX;
static const double METRIC_MAX;
double METRIC_MAX = DBL_MAX;我收到
error: ‘double Link::METRIC_MIN’ conflicts with a previous declaration
double METRIC_MIN = 1.0/DBL_MAX;发布于 2016-04-06 04:54:23
#define METRIC_MIN DBL_MIN
#define METRIC_MAX DBL_MAX似乎效果很好
发布于 2016-04-06 04:21:20
在Link.cpp中添加,请参阅上面的DeSiNe链接以获得完整代码。
double METRIC_MIN = 1.0/DBL_MAX;
double METRIC_MAX = DBL_MAX;@immibis建议的
发布于 2016-04-06 04:42:15
另一个这样的问题的答案,你所连接的是不清楚在哪里写的台词。我编辑了它,希望没有其他人被误导。
若要修复C++03中的编译错误,请更改:
static const double METRIC_MIN = 1.0/DBL_MAX; // to prevent metric to be 0
static const double METRIC_MAX = DBL_MAX;至:
static const double METRIC_MIN; // to prevent metric to be 0
static const double METRIC_MAX;然后,在确切的一个.cpp文件中(只要该文件包含了Link.h ),在文件范围内添加以下行并不重要:
const double Link::METRIC_MIN = 1.0/DBL_MAX;
const double Link::METRIC_MAX = DBL_MAX;然而,可能还有更多的问题。显然,编写这段代码的人使用的编译器的扩展名在C++11之前将C++11作为常量表达式,其馀的代码可能依赖于这些常量在标头中可见的值。
如果您修复了这个bug,然后从与这些变量相关的代码的其他部分获得编译错误,那么您可能不得不尝试另一种解决方案(这将涉及更多的代码编辑)。
https://stackoverflow.com/questions/36441082
复制相似问题