C++如何包含(循环依赖)?

2023-11-29

我有Environment.h 文件:

#include <windows.h>
#include "interfaces.h"

#ifndef ENVIRONMENT_H
#define ENVIRONMENT_H

class Environment {};
#endif

我有 Interfaces.h 文件:

#ifndef INTERFACES_H
#define INTERFACES_H

class IMoving {
    public: 
        virtual void Move() = 0;          
};

#endif

在界面 IMoving 中我想获得一个环境类,以了解如何移动

class IMoving {
    public: 
        virtual void Move(Environment*) = 0;          
};

如果我想这样做,我需要包含environment.h

#include "Environment.h"

在这里我收到一个错误,因为Environment.h - 包括Interfaces.h 和Interfaces.h - 包括Environtment.h。那么如何让它发挥作用呢?

抱歉拼写错误


For 循环依赖可以使用前向声明

在接口定义上方的 Interfaces.h 中,转发声明Environment如下:

class Environment;

然后,当您在类中实现 IMoving 时,您将在其实现 (cpp) 文件中包含 Environment.h。

您可以阅读有关前向声明的更多信息here.

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

C++如何包含(循环依赖)? 的相关文章

随机推荐

  • 使用用于 seo 目的的路由隐藏或删除 url 中的控制器名称 = codeigniter

    我正在使用一个控制器 如何使用路由删除或隐藏 URL 上的控制器名称 我已经设置了 htaccess 以删除我的 index php 我已经尝试了其他类似问题的很多代码 但我没有运气 我不知道我的实时服务器是否有问题 因为在我之前的项目中我
  • 在特定节点后插入 XElement

  • GAE 无法查找 mongodb atlas 实例的 SRV 记录

    我有一个在 Atlas 上运行的 mongodb 实例和一个在 GAE 上运行的 Spring Boot 应用程序 试图访问该数据库 我在本地运行它没有问题 但在 GAE 上运行时我在日志中看到此错误 com mongodb MongoCo
  • 使用 Zebra 打印机 [ZPL] 打印阿拉伯文本

    正如标题所说 是否有任何选项可以打印阿拉伯语内容 ZPL Printer 尝试的事情是添加字体并启动打印 XA FX FR CF0 40 CI28 FO130 45 FH FD Font file FS XZ 我的打印机安装了 TT0003
  • 在 mat-select 中设置默认选项

    我的 Angular 材质项目中有一个简单的选择选项表单字段 组件 html
  • 抽象类中的构造函数有什么用? [复制]

    这个问题在这里已经有答案了 既然我们无法实例化抽象类 那么抽象类中有构造函数的必要性是什么呢 抽象类被设计为可扩展的 每个构造函数都来自子类必须从基类调用构造函数 因此您的抽象类中需要构造函数 抽象类是一个骨架 因此直接实例化它是没有意义的
  • 将元素固定到顶部

    我有一个固定在顶部 x y 轴的元素 有什么方法可以将其更改为仅固定到 x 轴吗 例如 这样我就可以将固定元素向左和向右滚动 当前代码 div style width 100 The fixed header element div div
  • git-log 缺少撤消更改的合并提交

    考虑这个测试脚本 bin sh x initialize repository rm rf missing merge log mkdir missing merge log cd missing merge log git init cr
  • NSPredicate:如何将字符串视为数字?

    我正在 iOS 应用程序中使用 sqlite 上的核心数据构建一个复合 NSPredicate 来发出获取请求 一切都已经工作正常 但我无法包含最后一个条件 原因很简单 我需要检查存储为字符串的值是否在特定的浮点范围内 问题在于条件是按字母
  • 设置 SQL SERVER Express 2017 以允许远程连接

    刚刚从重大崩溃中恢复我的服务器 这导致 Windows Server 2016 被重新安装 我有一个连接到 sql server 数据库的桌面应用程序 问题是现在我在服务器上设置了数据库 我不记得如何将其提供给外部源 应用程序 你能帮我吗
  • 禁用 Woocommerce 中特定类别的购物车项目的其他产品类别

    我正在开发一个网上商店 有不同的方面 第一个是常规商店 第二个是夜间啤酒服务 我已经搜索过 但找不到我要找的东西 首先 夜间啤酒服务是一个特定类别 不应与常规商品一起订购 如果类别 beerservice 在购物车中 禁用所有其他类别添加到
  • 从文件名中删除特殊字符的脚本

    我有一个包含大量文件的文件夹 许多文件名中都包含 和 或 字符 e g Test doc pdf e g Test doc doc 有没有一种快速方法可以使用 Windows 批处理文件 vbscript 或类似文件删除 和 字符 我们将不
  • 我如何在 Windows 7 x64 上将 jboss EAP-7.0.0 作为 Windows 服务运行?

    我已经在 Windows 7 x64 操作系统上安装了 Jboss EAP 7 0 0 当我通过bin目录中的standalone bat文件运行Jboss EAP 7 0 0时 它启动没有任何问题 并且部署的 war文件也可以正常工作 但
  • 从 IronPython 初始化 C# List

    我在 C 中有一个相对较深的对象树 需要从 IronPython 进行初始化 我是 python 新手 我正在努力处理数组的初始化 举个例子 假设我在 C 中有这些类 public class Class1 public string Fo
  • 资源图片的绝对UriSource

    我有一个 WPF 项目 如果我将图像存储在 ProjectRoot Images image png 中 并将其编译为资源 那么我可以通过 xaml 此 xaml 位于根目录 将其作为 BitmapImage 访问BitmapImage U
  • django 导入错误 - 没有名为 core.management 的模块

    好吧 我看到很多这样的错误 我已经尝试了我所知道的一切 但尚未弄清楚这一点 我正在开发一个运行 python 2 5 和 Django 1 3 的开发服务器 解压 tar gz 下载后 使用 python setup py install
  • 更快的 JsonCpp 替代方案允许 Json 对象的复制/可变性?

    JsonCpp 很慢 而且代码相当混乱 有没有更快 更干净并且支持以下内容的替代方案 Json Value val copy val newMember 100 val newMember2 hello copy val val newMe
  • 将 COM 事件公开给 VBScript (ATL)

    我通过使用 ATL 简单对象 向导 用 C 和 ATL 构建了一个 COM 服务器 DLL 我关注的是微软的ATLDLLCOM服务器例子 除了一件事之外 一切都运行良好 我在 VBScript 中没有收到 COM 事件 我确实收到了 C 中
  • 单击时更改表格行的颜色

    我创建了一个表格 其中的行具有交替的颜色 例如黄色和红色 现在 我想将单击的行的颜色更改为一种常见颜色 例如蓝色 再次单击时恢复为原始颜色 我可以使用此代码更改颜色 mainTable find IDClicked css backgrou
  • C++如何包含(循环依赖)?

    我有Environment h 文件 include