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++循环包含问题[重复] 的相关文章

随机推荐

  • 在烧瓶中发送发布请求时出现错误(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