错误 C2797:成员初始值设定项列表内的列表初始化

2023-11-25

我当时正在看MVA 的 C++ 教程我下面提到的代码是由凯特而不是我编写的。然而,她似乎在编译时没有显示任何错误,但在我的例子中,我收到以下错误:

错误 1 ​​错误 C2797: 'NamedRectangle::_name': 列表初始化 内部成员初始值设定项列表或非静态数据成员初始值设定项 未实现 c:\users\abhimanyuaryan\documents\visual studio 2013\项目\凯特演示\17 继承\继承\namedrectangle.h 12 1 继承

代码中的第12行来自我的NameRectangle继承自的类Rectangle class:

class NamedRectangle :  public Rectangle
{
public:
    NamedRectangle() { }

    NamedRectangle(std::string initial_name, int initial_width, int initial_height)
        : Rectangle{ initial_width, initial_height }, _name{ initial_name } //--> This line
    {}  

std::string get_name() const { return _name; }

private:
    std::string _name;

};

当我删除时std::string来自构造函数的initial_name以及_name{initial_name}代码编译。请解释我,不要把我当作一个更高标准的经验丰富的程序员。我昨天才开始C++。


tl;dr:凯特的回答中的解决方案对OP有效;解释不正确。有问题的代码实际上是正确的,并且可以在 VS2015 中编译。错误(在VS2013Update 3)是 MS 如何处理 VS2013 RTM 中发现的错误的结果(他们实际上没有通过更新修复它,但他们确实破坏了一些工作代码)。在 VS2015 中已正确修复。


您的代码在 VS2015 中运行良好。据微软称,在VS2013中,

是的,我们在 Update 3 中将这些错误插入到编译器中,因为我们对非静态数据成员初始化的实现不完整。

成员初始化列表中的列表/花括号初始化在 VS2013 中也被破坏。他们的实施的问题是最佳插图 with a vector,其中有一个initializer_list构造函数should贪婪地匹配任何使用大括号和可转换参数的初始化,但它失败了:

struct S {
    S() : v1{1} {} // C2797, VS2013 RTM incorrectly calls 'vector(size_type)'

    std::vector<int> v1;
    std::vector<int> v2{1, 2}; // C2797, VS2013 RTM incorrectly calls 
                               // 'vector(size_type, const int &)'
};

编译器很容易退回到正常的重载解析。而不是使用std::initializer_list构造函数,它调用size_t构造函数。正如他们的评论所表明的,这是错误的!因此,由于其实现存在缺陷,Microsoft 决定禁用在此上下文中使用支撑初始化的功能。

For a std::string s,应该没有问题,因为正确的事情s{"duh"} is打电话std::string(const char*),但由于存在缺陷,MS 无论如何都会给出错误。解决方法是明确使用括号代替大括号(或升级到 VS2015),如 Kate 的回答所述。但错误的正确原因如上所述。

这适用于非静态数据成员初始化 (NSDMI) 以及初始化列表。这在这有更多解释Visual C++ 团队博客。至于为什么VS2013一直没有修复:

我们最初计划在 Visual Studio 2013 的更新中修复此错误,但从工程角度来看,正确的做法是避免再次出现混乱并彻底解决初始化的处理问题。但由于需要修改大量的基本代码,彻底修改编译器架构是一项艰巨的任务。我们不能冒险在更新中造成不兼容或大错误尾部,因此 NSDMI 的正确实现只能在主要版本中发布。

显然,该修复已包含在 Visual Studio 2015 中,但永远不会包含在 2013 的更新中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误 C2797:成员初始值设定项列表内的列表初始化 的相关文章

  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何在单例类和未命名类之间进行选择?

    我会使用这样的单例 Singleton single Singleton instance single gt do it 我会使用这样的未命名类 single do it 我觉得单例模式除了具有可读的错误消息之外 与未命名的类相比没有任何
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • 来自同一基模板类的 C++ 重写函数,具有多重继承不明确的函数调用

    我需要打电话init int iNumber 从基类派生的函数 基类 h pragma once include stdafx h template
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 如何使用 itextsharp 更改 PDF 公式的按钮图标?

    我目前正在尝试使用 itextsharp 填写预定义的表单 除了添加图像之外 一切正常 这之前已经在 Adob e 的 FDF 工具包中运行过 该工具包已编译为 NET 1 1 这不再适用于 NET 4 0 我改用了 itextsharp
  • 如何处理文件名中的空格

    我正在尝试迭代本地目录中的文件 foreach string name in Directory GetFileSystemEntries path FileAttrtibutes att File GetAttributes name 文
  • 结构大小与 typedef 版本不同?

    我的代码中有以下结构声明和 typedef struct blockHeaderStruct bool allocated unsigned int length typedef struct blockHeaderStruct block
  • Microsoft Visual Studio 2017 中的 wxWidgets 设置

    我花了大约 20 个小时试图弄清楚如何在 Microsoft Visual Studio 2017 中设置 wxWidgets 我遵循 https wiki wxwidgets org Microsoft Visual C 2B 2B Gu
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu
  • asio::this_coro::executor 的实现是什么

    在协程函数中 我们可以添加auto ex co await asio this coro executor 获取该协程的执行者 但当我想了解它的定义时 我发现了这个 Awaitable type that returns the execu
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS
  • C# 使用 .Equals() 比较两个 double

    我使用 ReShaper 当我用 比较两个双精度值时 它建议我应该使用 Math 具有公差的 ABS 方法 看 https www jetbrains com help resharper 2016 2 CompareOfFloatsByE
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web
  • 将二进制长字符串转换为十六进制 C#

    我正在寻找一种将长二进制字符串转换为十六进制字符串的方法 二进制字符串看起来像这样 0110011010010111001001110101011100110100001101101000011001010110001101101011 我

随机推荐

  • 在 VS 2022 中打开 .net Framework 4.5 项目。有什么解决方法吗?

    无论如何可以打开并工作吗 net framework 4 5项目于visual studio 2022 问题可能不在于 VS2022 而是在于 net framework 4 5开发人员包不再可用 我的项目无法更改目标版本 有什么解决方法吗
  • 如何在 vue.js 中转义大括号

    I have data in my database可能包含花括号 inside app blade php div code div data div code div 因此 如果我想向用户显示该数据 如果它位于 Vue 应用程序内 则会
  • 如何在没有 JAXBElement 包装器的情况下 JSON 编组 JAXBElement 包装的响应?

    我有一个使用 Spring v4 0 5 的 http 服务 它的 http 端点是使用 Spring Web MVC 配置的 响应是根据模式生成的 JAXB2 注解类 响应包含在JAXBElement因为生成的 JAXB 类不运行 Xml
  • Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8。错误

    我想用 Jitpackio 发布一个库 当我发布库时 出现以下错误 Failed to apply plugin com android internal application Android Gradle plugin requires
  • Vim:暂时仅显示特定行

    有时 在 Vim 中 我想仅显示文件的特定部分 例如 特定方法 同时隐藏其余部分 这有助于我专注于手头的问题 我想这样做而不实际更改文件 关于如何做到这一点有什么想法吗 欢呼和问候 克拉斯 Similar to the already me
  • 将 C 预处理器转换为 Rust

    我正在将一些 C 代码移植到 Rust 该代码包含很多类似这样的内容 define CONFIG FLAG NUMBER 23 1 define THIS 10 define THAT 11 define THIS AND THAT THI
  • Doctrine2 实体命名空间

    我是 Doctrine2 的新手 想知道如何告诉 Doctrine 我的实体使用哪个命名空间 我当前的配置is this 我的所有实体都位于名称空间 project entity 中 所以 每次我想获取实体 Color 时 我都必须写 em
  • 以特殊格式打印当前 UTC 日期时间

    很简单 但我是 python 新手 我正在尝试以特殊格式打印当前 UTC 日期和时间 Python 2 6 6 import datetime time print time strftime a b d H M S Z Y datetim
  • Inno Setup RegKey存在于64位系统上

    我使用 Inno Setup 创建了一个安装程序 并想使用 Pascal Script 查询注册表 if RegKeyExists HKEY LOCAL MACHINE SOFTWARE Classes Installer UpgradeC
  • 如何在 Flutter 中获取“Ap​​ps Instance Id”

    我想设置Firebase 应用内消息传递在我的扑动应用程序上 首先 它需要FirebaseInstanceId正如所解释的here 这样我就可以测试向我的设备发送消息 然而该文档并没有详细说明如何在 Android 上获取它 尤其是在 fl
  • 删除级联时的 MongoDB DBRef

    MongoDB 有没有办法让外键具有 ON DELETE CASCADE 功能 我知道您可以使用 DBRef 作为一种外键 但是当删除引用指向的集合中的项目时 引用将返回 null 但我希望引用所属的项目被删除 我该怎么做呢 或者我每次删除
  • 错误 1114 (HY000):表“XXX”已满

    我知道这个问题以前被问过 但似乎没有任何帮助 我在 2 3 天前遇到了这个问题 询问服务器支持 他们告诉我必须将 mysql 从 var 移动到 home 那里是我所有的磁盘空间 这就是我所做的 然后我运行插入 一切都很顺利 直到今天 当我
  • 无法在 PDF 中保存阿拉伯语单词 - PDFBox Java

    正在尝试保存Arabic可编辑 PDF 中的单词 它工作得很好English但是当我使用阿拉伯语单词时 我遇到了这个异常 java lang IllegalArgumentException U 0627 在此字体 Helvetica 编码
  • ASP.Net MVC 3.0 Ajax.BeginForm 正在重定向到页面?

    在 ASP Net MVC 3 0 中我使用 Ajax Beginform 并点击 JsonResult 表单成功后我将调用 jQuery 函数 但由于某种原因我的表单重定向到 JsonAction my View using Ajax B
  • Delphi XE中占用大量内存的TStringList对象

    我正在开发一个模拟程序 该程序首先要做的事情之一是读取一个大文件 28 MB 大约 79 000 行 解析每一行 大约 150 个字段 为该对象创建一个类 并将其添加到 TStringList 它还读取另一个文件 该文件在运行期间添加更多对
  • Volley 库请求队列的最大大小是多少

    我在用VolleyAndroid 中的库 我想知道允许使用的队列的最大大小是多少Volley图书馆 我没有发现与此相关的任何内容 据我所知 您需要将网络请求添加到队列中 但我不知道可以将其并行队列的最大大小是多少 RequestQueue
  • MySQL 索引减慢查询速度

    MySQL Server version 5 0 95 Tables All InnoDB 我遇到 MySQL 数据库查询问题 基本上我发现如果我索引一个特定的 varchar 50 字段tag name 我的查询比不索引字段花费的时间更长
  • 如何限制python上的用户输入长度?

    amt float input Please enter the amount to make change for 我希望用户输入美元金额 因此允许 5 个字符 00 00 有没有办法限制它 以便不允许他们输入超过 5 个字符 我不想要这
  • 从 Java 字符串末尾删除行尾字符

    我有一个字符串 我想仅使用 Java 从字符串的最末尾删除行尾字符 foo r nbar r nhello r nworld r n 我想成为 foo r nbar r nhello r nworld 这个问题与问题类似 但不一样59367
  • 错误 C2797:成员初始值设定项列表内的列表初始化

    我当时正在看MVA 的 C 教程我下面提到的代码是由凯特而不是我编写的 然而 她似乎在编译时没有显示任何错误 但在我的例子中 我收到以下错误 错误 1 错误 C2797 NamedRectangle name 列表初始化 内部成员初始值设定