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

2023-12-04

我很抱歉我的新手问题,但我对 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(使用前将#替换为@)

对构造函数的调用不能出现在常量表达式中 的相关文章

随机推荐

  • GridView“ ”引发了未处理的事件 RowUpdating。 asp.net 背后的 C# 代码

    Stackoverflow和其他网站上也有类似的问题 但我似乎错过了一些东西 我有一个 GridView 绑定到来自数据库的 DataTable 我的目标是使用调用以下方法的同一行中的按钮更新当时的一行 protected void Tes
  • TensorFlow:恢复 RNN 网络后损失猛增

    环境信息 操作系统 Windows 7 64位 从预构建的 pip 安装的 Tensorflow 无 CUDA 1 0 1 Python 3 5 2 64 位 Problem 我在恢复网络 RNN 字符基础语言模型 时遇到问题 下面是具有相
  • Spark 查找 Dataframe 提高性能的最佳方法

    数据框A 数百万条记录 其中一列是create date modified date 数据框 B 500 条记录具有 start date 和 end date 目前的方法 Select a b from a join b on a cre
  • 如何检测html5画布是否为空白?

    我有一个涂鸦应用程序 可以将 html5 画布保存到 s3 中的图像中 如果用户在没有绘制任何内容的情况下意外单击 保存 我想避免保存空白 完全透明 的 png 我发现即使对于空白画布 toDataURL 也绝不是空字符串 而是大量数据转储
  • 表单上的两个提交按钮

    假设我有一组机构 每个机构都知道他的父亲是谁 并且一个机构可以有很多孩子 现在我为这个问题创建了一组级联下拉列表 因此在第一个时候 他会找到没有父亲的列表 如果可能的话 为第 0 层 一旦用户选择一个项目 第二个列表上的列表就会加载其子列表
  • Xcode 7: -F/ 的链接器警告,但 app.xcodeproj/project.pbxproj 中没有设置与 匹配

    我使用 Xcode 7 beta 3 将 iOS 的 Swift 1 x 项目转换为 Swift 2 x 它可以编译并运行 但链接器警告仍然存在 我已经在 project pbxprox 中搜索了有问题的路径 并查看了 Xcode 中的 构
  • 在 c# 中使用 asp.net 中的 Windows 身份验证

    我试图了解 Windows 身份验证的工作原理以及如何实现它 我读过很多文章 并在 youtube 上观看了一些相当长的视频 但我仍然不明白需要添加到我的 web config 文件 index aspx 页面中才能使其正常工作 这是ind
  • Python终端打开后报错

    当我尝试通过终端从终端打开 python 时python命令 我突然遇到错误 终端工作正常 但我想了解为什么会发生这种情况 提前致谢 PS C Users blackbird gt py AMD64 on win32 Type help c
  • 适用于 Go 的 AWS 开发工具包 - DynamoDb - 向 FilterExpression 添加多个条件

    我正在尝试使用表达式生成器按多个条件过滤 DynamoDb 扫描 根据这个博客文章 尝试在构建器中添加另一个条件将覆盖先前的条件 必须有某种方法来添加另一个条件 但我还没有找到一种方法来做到这一点 这行不通 cond1 expression
  • c++ * 和 & 同时

    在我的 C 数据结构课程中 我们正在研究二叉树 有些代码包含同时使用 和 的地方 彼此相邻 这非常令人困惑 void balance AvlNode t 是使用 this 的函数定义的一个示例 这里的 和 会发生什么 编辑 这个问题的答案告
  • 如何使用 PHP 和 Javascript 实现服务器推送/长轮询/comet

    如何使用 PHP 和 Javascript 实现彗星 服务器推送设计模式 本质上我想要的是这样的 用户单击 提交 按钮 JavaScript 显示类似 正在处理 0 100 个项目 的消息 每当处理新项目时 php 服务器都会推送更新 并且
  • 使用 sqlalchemy 将数据加载到 Oracle 数据库时不允许使用“Multi”方法

    我正在使用 sqlalchemy 和 pandas 将数据帧加载到 Oracle 数据库 由于 multi 方法允许批量上传 因此我选择该方法 我的pandas版本是1 0 1 但是我收到以下错误 当前数据库版本设置的 oracle 方言不
  • d3.js 可重用饼图,具有动态更新

    我正在尝试创建一个具有动态转换的可重用饼图作为学习任务 我正在研究 Chris Viau 编写的 d3 js 可重用组件电子书 我遇到的问题基本上是它不更新 而是创建多个饼图 我想知道我是否不理解 d3 dispatch 的工作原理 或者我
  • 在 AWS CodeBuild 中缓存 Gradle 包装器

    这就是我当前的构建规范 phases build commands gradlew soakTest s cache paths root gradle caches gradle 但是 当此构建规范在 CodeBuild 中运行时 它会打
  • 如果 Term 达到某个点,Kusto row_cumsum 会修改 Term

    我有一份按以下顺序排列的员工姓名和工资列表 我需要按以下格式创建输出表 即 每当累计工资总额超过 3000 时 我必须检测到这一点并标记该行 我尝试过 row cumsum 并重置Term一旦超过 3000 但第二次迭代就不起作用了 dat
  • CSS 使用 Flexbox 对齐两侧的几个项目 [重复]

    这个问题在这里已经有答案了 我试图使用 css flexbox 在两侧做一些项目 但不知何故我无法将它们 div 并排粘贴 PS 我无法设置元素数量 因为我希望它灵活 因为我可以添加或删除 并且它不会影响我的CSS 我希望它是这样的 图片样
  • 有条件合并列表元素

    我想根据某些表达式有条件地合并列表中彼此跟随的元素 一个更好地解释我想做的事情的例子 from val list List a1 a2 b1 b2 b3 a3 a4 我想将以 b 开头的所有元素合并到单个元素中以获得如下结果列表 List
  • FormData 为空有问题吗?

    我似乎对 FormData 为空有疑问 我正在尝试在单个 POST 请求中上传文件和 JSON 我尝试了各种各样的方法 但似乎没有任何效果 我想知道我是否在这里弄乱了一些基本的东西 但我似乎找不到任何东西 非常感谢您的帮助
  • 使用变换函数添加变量,同时忽略 NA

    我有一个包含大量变量的数据框 我通过将一些旧变量添加在一起来创建新变量 我用来执行此操作的代码是 name of data frame lt transform name of data frame new variable var1 va
  • 对构造函数的调用不能出现在常量表达式中

    我很抱歉我的新手问题 但我对 C 不太了解 任何人都可以回答为什么我在编译以下代码时收到错误 错误 对构造函数的调用不能出现在常量表达式中 class EliminationWeight public typedef double Type