首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对构造函数的调用不能出现在常量表达式中。

对构造函数的调用不能出现在常量表达式中。
EN

Stack Overflow用户
提问于 2016-04-06 03:44:22
回答 3查看 432关注 0票数 2

当我为项目make build运行DeSiNe时,我得到了错误:a call to a constructor cannot appear in a constant-expression

代码语言:javascript
复制
$ 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中的类定义将从

代码语言:javascript
复制
static const double METRIC_MIN = 1.0/DBL_MAX; // to prevent metric to be 0
static const double METRIC_MAX = DBL_MAX;

代码语言:javascript
复制
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;

我收到

代码语言:javascript
复制
error: ‘double Link::METRIC_MIN’ conflicts with a previous declaration
double METRIC_MIN = 1.0/DBL_MAX;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-06 04:54:23

代码语言:javascript
复制
#define METRIC_MIN DBL_MIN
#define METRIC_MAX DBL_MAX

似乎效果很好

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 04:21:20

在Link.cpp中添加,请参阅上面的DeSiNe链接以获得完整代码。

代码语言:javascript
复制
double METRIC_MIN = 1.0/DBL_MAX;
double METRIC_MAX = DBL_MAX;

@immibis建议的

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 04:42:15

另一个这样的问题的答案,你所连接的是不清楚在哪里写的台词。我编辑了它,希望没有其他人被误导。

若要修复C++03中的编译错误,请更改:

代码语言:javascript
复制
static const double METRIC_MIN = 1.0/DBL_MAX; // to prevent metric to be 0
static const double METRIC_MAX = DBL_MAX;

至:

代码语言:javascript
复制
static const double METRIC_MIN; // to prevent metric to be 0
static const double METRIC_MAX;

然后,在确切的一个.cpp文件中(只要该文件包含了Link.h ),在文件范围内添加以下行并不重要:

代码语言:javascript
复制
const double Link::METRIC_MIN = 1.0/DBL_MAX;
const double Link::METRIC_MAX = DBL_MAX;

然而,可能还有更多的问题。显然,编写这段代码的人使用的编译器的扩展名在C++11之前将C++11作为常量表达式,其馀的代码可能依赖于这些常量在标头中可见的值。

如果您修复了这个bug,然后从与这些变量相关的代码的其他部分获得编译错误,那么您可能不得不尝试另一种解决方案(这将涉及更多的代码编辑)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36441082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档