C++循环包含问题[重复]

2023-12-02

我有这个文件 logger.hpp:

#ifndef _LOGGER_HPP_
#define _LOGGER_HPP_

#include "event.hpp"

// Class definitions
class Logger {
public:
    /*!
     * Constructor
     */
    Logger();
    /*!
     * Destructor
     */
    ~Logger();
    /*!
     * My operator
     */
    Logger& operator<<(const Event& e);
private:
    ...
};

#endif

还有这个文件 event.hpp

#ifndef _EVENT_HPP_
#define _EVENT_HPP_

#include <string>

#include "logger.hpp"

// Class definitions
class Event {
public:
  /*!
   * Constructor
   */
  Event();
  /*!
   * Destructor
   */
  ~Event();

  /* Friendship */
  friend Logger& Logger::operator<<(const Event& e);
};

#endif

出色地。在 logger.hpp 中,我包含 event.hpp,在 event.hpp 中,我包含 logger.hpp。

  • 我需要包含 event.hpp 因为在 logger.hpp 中我需要定义运算符。

  • 我需要包含 logger.hpp,因为在 event.hpp 中,要在类 Event 中定义友谊。

嗯,这当然是一个循环递归.

我试过这个:

1)在logger.hpp中:

#ifndef _LOGGER_HPP_
#define _LOGGER_HPP_

#include "event.hpp"

class Event; // Forward decl

// Class definitions
...

不起作用。编译器告诉我,在 event.hpp 中有一个无法识别的类型,称为 Logger(当然他是对的):

ISO C++ 禁止声明 没有类型的“记录器”

编译器向我指示了有友谊声明的行(在 event.hpp 中)。

2)在event.hpp中:

#ifndef _EVENT_HPP_
#define _EVENT_HPP_

#include <string>

#include "logger.hpp"

class Logger; // Forward decl

// Class definitions
...

不起作用。编译器告诉我,在 logger.hpp 中,有一个名为 Event 的无法识别的类型(并且,由于显而易见的原因,它是正确的):

ISO C++ 禁止声明“Event” 没有类型

编译器向我指示了存在运算符声明的行(在 logger.hpp 中)。

嗯……不知道如何面对?我尝试了一切,我到处提出声明,但是,当然,它们没有任何帮助。 怎么解决这个问题??? (我认为存在最佳实践,希望如此:))。

谢谢。


摆脱#include "event.hpp" in logger.hpp- 前瞻性声明class Event如果您需要的只是对某个的引用就足够了Event函数原型中的对象:

#ifndef _LOGGER_HPP_
#define _LOGGER_HPP_

// #include "event.hpp"  // <<-- get rid of this line

class Event; // Forward decl

// Class definitions
...

实施class Logger in logger.cpp可能需要包括event.hpp.

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

C++循环包含问题[重复] 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 在烧瓶中发送发布请求时出现错误(python)

    我正在向协程函数发送一个发布请求 但出现以下错误 Traceback most recent call last File usr local lib python3 4 site packages flask app py line 19
  • 为 Cygwin 启用本机 NTFS 符号链接

    最近的 NTFS 和 Windows 实现了符号链接 NTFS连接点自 NTFS 3 0 Windows 2000 起可用作目录符号链接linkd or junction tools NTFS 符号链接也可以用作符号链接 对于文件和目录 因
  • app.config

    假设我有一个使用 VS2008 针对 NET 2 0 构建和编译的 WinForms 应用程序 据我了解 在运行时 应用程序将首先尝试加载 NET 2 0 CLR 因为这是它的编译对象 不管app config 文件的任何 supporte
  • Windows Phone 8.1 从代码发送 HTML 邮件

    我试图打开邮件应用程序 其内容在代码中定义 但是当我发送它时 gmail oulook 显示为纯文本而不是 HTML private async void SendEmail string url EmailMessage mail new
  • C# 将日期时间转换为自定义格式

    我正在查询一个datetime dd mm YYYY hh mm ss 数据库中的值并将其插入到列表中 如下所示 ord invoiceDate dt Rows i invoicedate ToString 如何将此字符串转换为自定义格式
  • 在matlab中使用bitshift绘制RGB直方图

    我正在尝试在 Matlab 中创建马赛克图像 该数据库主要由 RGB 图像组成 但也包含一些灰度图像 我需要计算直方图 就像维基百科文章的示例中关于颜色直方图 对于 RGB 图像 考虑使用 Matlab 中的位移运算符来组合 R G 和 B
  • HTML5 - mp4 视频无法在 IE9 中播放

    我有一个 mp4 视频 我想使用 HTML5 在 IE9 中播放
  • startManagingCursor() 在服务中?

    有没有办法在服务中而不是活动中使用 startManagingCursor 并获得相同的结果 如图所示here 更具体地说 我想根据服务的生命周期管理给定游标的生命周期 例如 当服务被销毁时 它将自动对给定的 Cursor 调用 deact
  • 如何传递非静态函数作为回调? [复制]

    这个问题在这里已经有答案了 我目前正在使用 Qt 和图形引擎 在 QGLWidget 实例的初始化期间 我需要将一些函数指针传递给我的引擎 寻找回调的函数是 virtual void Buffer CreateCustom byte get
  • 如何创建带有图像的单选按钮

    我想要一个带有图像而不是文本的单选按钮 所以我想要一个男性和女性的图像 而不是男性和女性的文本 这实际上可以使用标准 HTML 来完成还是必须使用 jQuery 我该怎么做呢 Use
  • 编译器是否允许回收释放的指针变量?

    有人声称 a compiler is free to reuse the pointer variable for some other purpose after the realloc being freed so you have n
  • 升级 ColdFusion 使用的 JRE

    我有一个 ColdFusion 8 1 应用程序 它被大量使用 我看到 jrun exe 在任务管理器中的内存使用率非常高 这是一个 32 位 Windows 2003 服务器 当 Jrun 达到大量内存使用量时 ColdFusion 将在
  • 如何在node.js中将类似字符串的数组转换为数组?

    实际上我得到了arraylist从 Android 设备中node js 但由于它是字符串形式 所以我想将其转换为array 为此 我在中提到了很多类似的问题SO但他们都没有帮助 我也尝试使用JSON parse 但这没有帮助 我正在以表格
  • 如何以通用方式检测位置缺失:固定?

    在iPad等移动设备上 我想禁用仅在支持position fixed时才有效的功能 有没有一种方法可以在不使用用户代理字符串的情况下检测这些设备 原因是我想尽可能避免搜索 iPad iPhone iPod Android 等 运行以下函数来
  • Webstorm IDE 缺少 Node.js Boilerplate 项目类型

    所以我专门检索了webstorm来学习和使用node js进行开发 似乎 Webstorm 的所有文档都指向现有项目类型 其中包含样板 Node js 设置 而没有所有 Web 配置等 我想使用这个样板模板 而不是带有一堆网络垃圾和不必要的
  • 为什么一个特征没有为一个明确实现了它的类型实现?

    我正在尝试使用Diesel查询 MySQL 数据库并使用 Handlebars 模板显示结果Rocket 我有这个模型 rs derive Queryable Serialize pub struct Post pub id i32 pub
  • 如何从 Java 的标准输入读取整数数组?

    在标准输入的一行中 我有 3 种类型的整数 第一个整数是 id 第二个整数是 N 某个数字 之后是 N 个整数 用一个空格分隔 我想将其存储在数组或 ArrayList 中 我如何使用 BufferedReader 来做到这一点 我有以下代
  • OpenCart 订阅模式(x 个月)

    我正在使用 OpenCart 设置一个电子商务网站 并且我想提供订阅 特别是 3 6 12 个月的订阅 我对定期计费不感兴趣 我知道有 PayPal 和 Authorize net 的模块 我希望用户提前付款一次 从配置的角度来看 这是否会
  • 为轮播横幅添加视差效果,使图像和文本以不同的速度移动

    我可以使用轮播效果 但我不知道如何使文本和图像以不同的速度移动 如 IBM 横幅所示 http www ibm com us en 这是我的 jQuery fn zinCarousel function settings var setti
  • C++循环包含问题[重复]

    这个问题在这里已经有答案了 我有这个文件 logger hpp ifndef LOGGER HPP define LOGGER HPP include event hpp Class definitions class Logger pub