两个互相引用的类

2024-03-04

我是 C++ 新手,所以这个问题可能很基本:

我有两个类需要互相引用。每个都在自己的头文件中,#include 是另一个的头文件。当我尝试编译时,我收到其中一个类的错误“ISO C++ 禁止声明没有类型的‘Foo’”。如果我切换事物,以便首先解析相反的标头,我会得到与其他类相同的错误。

C++ 中是否可以有两个需要相互引用的类?

有关更多详细信息:我有一个“App”类和一个“Window”类。 App需要引用Window来制作窗口。 Window有一个回调App的按钮,所以需要App的引用。如果我不能让两个类相互引用,是否有更好的方法来实现这一点?


只要标头中没有实现依赖项,您就可以在头文件中使用前向声明来绕过循环依赖项。在 Window.h 中,添加以下行:

class App;

在 App.h 中,添加以下行:

class Window;

在类定义之前添加这些行。

然后在源文件中,包含实际类定义的标头。

如果您的类定义引用其他类的成员(例如,在内联中),则需要将它们移动到源文件(不再是内联)。

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

两个互相引用的类 的相关文章

随机推荐

  • Backbone.js 获取和设置嵌套对象属性

    我有一个关于 Backbone js 的简单问题get and set功能 1 使用下面的代码 如何直接 获取 或 设置 obj1 myAttribute1 另一个问题 2 在模型中 除了defaults对象 我可以 应该在哪里声明模型的其
  • 如何在 Angular 2/4 中创建通用控件?

    我必须创建一个控件 模板 通用 html 其中有一个下拉菜单 该公共控件将调用我的数据服务并将该下拉列表与数据绑定 我可以创建一个组件并将其 HTML 作为下拉菜单 然后在所有父组件中调用该组件的选择器 但是 我想要的是我需要将密钥传递给这
  • SSRS行组+列组=行号问题

    我带着另一个 SSRS 问题回来了 我正在处理调查数据 我有一个程序可以返回组织对每个问题的答复计数 因此 我的报告被定义为行的组织组和列的答案组 组织的数量和答案都是可变的 这按预期工作 我尝试在组织旁边添加 RowCount 以便可以显
  • 如何确定安装的 Eclipse 是 32 位版本还是 64 位版本?

    如何确定我的 Windows 7 PC 上的特定 Eclipse 实例是 32 位还是 64 位版本 我检查了 关于 屏幕以及可以从那里调用的迷宫般的对话框 但我没有找到任何线索 另外 在Windows资源管理器中右键单击eclipse e
  • 它只是不可能添加操作扩展图标

    我实际上已经尝试了两周来获得一个用于显示操作扩展的图标 但绝对没有任何效果 我过去见过这样的问题iOS 8 操作扩展图标大小 https stackoverflow com questions 25917700 ios 8 action e
  • 无法安装 ruby​​ gems - zlib 错误

    我正在尝试安装一些 Ruby Gems 以便在收到 Twitter 消息时可以使用 Ruby 来通知我 然而 在做了一个gem update system 现在每次我尝试执行以下操作时都会出现 zlib 错误gem install任何东西
  • 为什么我下载文件时我的移动运营商会重新编码?

    我在 Android 中发现了一个非常奇怪的现象 我发现 当下载超过 3g 的图像时 随后计算的 sha1 与服务器上的文件应有的不同 经过进一步调查 我发现图像实际上被缩小了尺寸并重新编码 我的移动运营商 verizon 似乎正在尝试优化
  • String.format 使用 exception.getMessage() 作为格式

    我有一个与 JAVA 中的 String format 有关的问题 我的 HibernateDao 类负责持久化实体 并在发生任何约束违规时抛出异常 该消息包含 s 并将用作上层的格式 因为我应该担心这一层中的类型 因此无法识别我无法持久化
  • 无法使用 Windows 使用 ssh 密钥访问 gitlab 存储库

    我已关注这些说明 https docs gitlab com ee ssh generate an ssh key pair用于使用 ssh keygen 生成密钥对 当我试图找出问题所在时 我实际上生成了 ed25519 和 rsa 密钥
  • CSS 对角线 - 如何适应其父元素?

    我怎样才能使对角线填充并适合一个盒子 只是纯CSS 不使用任何背景图像 div diagonal container border 1px solid 000 width 400px height 400px margin 0 auto t
  • Vim 删除空行

    我可以运行什么命令来删除 Vim 中的空行 g d g将在与正则表达式匹配的行上执行命令 正则表达式是 空行 命令是 d 删除
  • 如何将回归线添加到具有按因子进行颜色编码的多个数据系列的图中?

    我希望将回归线添加到具有多个按因子进行颜色编码的数据系列的图中 使用brewer pal 调色板 我创建了一个图 其中数据点按因子 plant ID 着色 下面是代码示例 palette brewer pal 12 Paired plot
  • 导入错误:没有名为 Crypto 的模块

    我刚刚开始探索Python 我正在尝试运行 AES 算法代码 但我面临着 导入错误 没有名为 Crypto 的模块 你如何解决这个问题 您必须安装加密包 https pypi python org pypi pycrypto https p
  • 本地化静态网站的正确方法是什么

    我需要将我们的网站本地化为多种语言 该网站由多个静态页面组成 没有动态后端 我们有一个良好的国际社会 人们愿意帮助我们 问题是如何安排网站翻译 正确的工作流程是什么 静态网站本地化的最佳实践是什么 如何组织语言字符串包 如何组织从字符串捆绑
  • onreadystatechange 中 XHR 获取请求 URL

    有没有办法在 onreadystatechange 方法中获取请求的URL 我想运行多个 XHR 请求并知道其中哪个会返回 xhr open GET https url i true xhr onreadystatechange funct
  • django 剥离/删除/清除值

    我正在使用 django 1 6 7 和 python 2 7 我试图在将值提交到数据库之前清除字段中的数据 如果它符合条件 我一直在使用 strip 但这不再有效 搜索 django 文档后我找不到解决方案 这是我的 forms py 文
  • WPF 中的数字数据输入

    您如何处理 WPF 应用程序中的数值输入 如果没有 NumericUpDown 控件 我一直在使用 TextBox 并使用下面的代码处理其 PreviewKeyDown 事件 但它非常丑陋 有没有人找到一种更优雅的方式来从用户获取数字数据而
  • 如何在 NetBeans 平台中隐藏没有图层文件的菜单?

    我很难在 NetBeans 平台中自定义菜单 我看到的示例要求您拥有一个 Layer 文件 但我认为我的 NetBeans 平台项目中没有该文件 要通过图层隐藏菜单 您应该这样做
  • 使用 PHP eval 的风险[重复]

    这个问题在这里已经有答案了 可能的重复 什么时候 如果有的话 eval 不是邪恶的 https stackoverflow com questions 3499672 when if ever is eval not evil php 中的
  • 两个互相引用的类

    我是 C 新手 所以这个问题可能很基本 我有两个类需要互相引用 每个都在自己的头文件中 include 是另一个的头文件 当我尝试编译时 我收到其中一个类的错误 ISO C 禁止声明没有类型的 Foo 如果我切换事物 以便首先解析相反的标头