警告:基类“A”应该在复制构造函数中显式初始化

2023-12-31

我有以下类结构:

class A{
   A(){}
   A(const A& src){}
};

class B : virtual A {
   B():A(){}
   B(const B& src):A(src){}
};

class C : virtual A {
   C():A(){}
   C(const C& src):A(src){}
};
class D : virtual B, virtual C {
   D():B(),C(){}
   D(const D& src):B(src),C(src){}
};

这给了我警告:

在复制构造函数“D”中:

警告:基类“A”应在副本中显式初始化 构造函数

我不明白。 D 的复制构造函数调用copy-ctorB 称为copy-ctorA 的。 为什么它要我打电话给copy-ctorD 中的 A?

如果我这样做,岂不是copy-ctorA 被调用两次?一次从 B 调用,一次从 D 调用。

对此的任何意见都非常感谢。


现在我证实我是对的,B使用虚拟继承从A派生。

当发生这种情况时,最派生的类负责构造基类。这允许多重继承菱形。

======== A ============
   ^            ^
   B            C
    \           /
     \         /
      \       /
       \     /
          D

D 派生自 B 和 C,并且都派生自 A,因此 D 将继承 A 的 2 个副本,一份来自 B,一份来自 C。

如果B1和B2都使用虚继承从A派生,那么最终类必须初始化基类,即A,从而保证只有一次实例。

这就是您收到错误消息的原因。

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

警告:基类“A”应该在复制构造函数中显式初始化 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 重载<<的返回值

    include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 'git add .' 是什么意思? ('git add' 单点) 命令做什么?

    当使用句点 或句号 单点 将文件添加到舞台时 我不明白 Git 命令的含义 git add 这是做什么的 git add 添加 暂存当前目录中的所有文件 这是为了方便 如果您不想通过使用添加某些文件 仍然可以使用 gitignore 一个教
  • QGraphicsView / QGraphicsScene 尺寸匹配

    如何制作具有指定大小的 QGraphicsScene 和 QGraphicsView 来监视具有相同大小的场景 这听起来像是一个愚蠢的问题 但请考虑以下测试代码 1 import sys from PyQt4 import QtGui Qt
  • 执行 GET 请求并构建查询字符串

    我对 Go 还很陌生 还不太了解一切 在许多现代语言 Node js Angular jQuery PHP 中 您可以使用附加查询字符串参数执行 GET 请求 在 Go 中执行此操作并不像看起来那么简单 而且我还无法真正弄清楚 我真的不想为
  • 从快捷方式打开特定目录中的 Powershell

    如何制作一个将 Powershell 打开到特定目录的 Windows 快捷方式 比如目标 SystemRoot system32 WindowsPowerShell v1 0 powershell exe noexit command c
  • Fiddler - 通过隧道传输 http 请求到端口 443

    我有 Fiddler 来解密 https 流量 效果很好 http fiddler2 com documentation Configure Fiddler Tasks DecryptHTTPS http fiddler2 com docu
  • Django 基于类的视图,get_absolute_url 不起作用

    我购买并正在阅读 Two Scoops of Django Best Practices for Django 1 5 一书 其中有一个基于类的视图的示例 执行此操作后 我在提交表单后收到错误 ImproperlyConfigured at
  • Eventmachine gem 安装失败

    我无法安装 eventmachine 好吧 我知道这个问题已经被问了很多 但到目前为止 我发现没有任何解决方案对我有帮助 所以我在这里发布作为最后的手段 I use windows 8 x64 using ruby 2 0 0p195 x6
  • 将图标作为资源嵌入到 WPF 应用程序中

    我正在尝试将一个图标嵌入到我的 WPF 应用程序中 以便我可以使用以下代码将其拉出以用作 Windows 7 JumpList 中的图标 newScene IconResourcePath System Reflection Assembl
  • 不区分大小写的正则表达式

    在 Haskell 中使用带有选项 标志 的正则表达式的最佳方法是什么 I use Text Regex PCRE 该文档列出了一些有趣的选项 例如 compCaseless compUTF8 但我不知道如何使用它们 All the Tex
  • 如何使用 lodash 比较对象而不考虑其顺序

    我正在尝试使用 lodash 比较两个对象 如下所示 问题是它总是返回 false 我认为问题在于对象具有不同的键和值顺序 然而 无论订单如何 我都找不到如何比较它的解决方案 如何忽略顺序并正确比较两个对象 var obj1 event p
  • 是否可以更改 sendEmail 中的“发件人电子邮件”?

    我目前正在编写一个脚本 如果 Excel 已更新 该脚本会向用户发送电子邮件 我能够发送电子邮件 但是 在测试时 我注意到 发件人 电子邮件是我的电子邮件 我想将 发件人 电子邮件更改为另一个电子邮件 电子邮件受保护 cdn cgi l e
  • 如何在 k8s 集群中更新 Prometheus 配置

    我在 k8s 中运行 Prometheus 你能告诉我如何更改运行配置吗prometheus yaml在集群中 我只想简单地改变 scrape configs job name my exporter scrape interval 15s
  • Javascript:让用户选择像 Firebug 这样的 HTML 元素?

    我想编写一个浏览器 Chrome FF 扩展 需要选择网页上的元素 我希望它的行为像 Firebug 的元素检查器那样 单击检查箭头 然后可以悬停 突出显示元素 当您单击所需的元素时 系统会检查该元素 我只是对允许用户选择元素的代码感兴趣
  • jOOQ:在单个对象中返回带有 join、groupby 和 count 的列表

    核心问题 如何正确地将查询中的信息获取到对象中 Idea我正在 DAO 中创建函数 这可以归结为以下查询 select A count from A left join B on B aId A aId group by A 我正在寻找一种
  • RXTX gnu.io.PortInUseException:&警告:RXTX 版本不匹配

    我正在尝试使用 RXTX API 通过 Java Marine API 从 NMEA 0183 GPS 获取 GPS 数据 运行 Java Marine 提供的 SerialPortExample java 我返回两个错误 也许它们是相关的
  • Unity脚本执行顺序和Start()

    Unity的文档中有这样一行 默认情况下 不同脚本的Awake OnEnable和Update函数按照脚本加载的顺序 任意 被调用 所以我在这里有两个问题 在这种情况下 任意 是什么意思 是随机的吗 这是否还包括 Start 和 Awake
  • 如何在node.js中使用集群?

    我对 Node js 和 Express 非常陌生 我目前正在通过构建自己的服务来学习它 我最近读到了有关集群的内容 我明白了集群的作用 我无法理解的是如何在生产应用程序中使用集群 我能想到的一种方法是使用主进程坐在前面 并以循环方式将传入
  • 通过c++接口导出整个类

    好的 我会重写问题 1 做的够吗 class declspec dllexport CXyz public int Food printf Food n 这样该类就可以在 exe 中像这样使用 include CXyz h CXyz obj
  • Imageview 和 PagerAdapter

    我想将图像放在 ViewPager 的每个页面中 就像一本书 这些图像来自 url 列表 我的适配器看起来像这样 private class MyPagerAdapter extends PagerAdapter Override publ
  • 警告:基类“A”应该在复制构造函数中显式初始化

    我有以下类结构 class A A A const A src class B virtual A B A B const B src A src class C virtual A C A C const C src A src clas