c++ - 包含中的递归(文件 1 包含包含文件 1 的文件 2)

标签 c++ logging header-files

我一直在环顾四周,但没有发现任何真正帮助我解决这个问题的问题。我不是很有经验,所以也许这个问题是微不足道的,这是我缺乏知识的问题。
我正在尝试解决一个问题。我们的系统有一个记录器,它获取不同的日志并将它们放入 SharedMemory .
但是,从我们的一个类(class)( StateMachine )我不能使用 Loogger因为递归:

  • Logger.h包括SharedMemory.h
  • SharedMemory.h包括StateMachine.h

  • 如果我包括 Logger.hStateMachine.h ,编译错误到处出现。首先,我试图通过创建第二个 SharedMemory 来解决这个问题。专用于 Logger并且不包括 StateMachine.h .
    通过这种方法,编译错误得到了解决,但我的经理不喜欢这种设计解决方案。
    我还尝试更改包含顺序,并在包含之前声明类但它不起作用(例如,声明 class SharedMachine ;在 #include SharedMachine.h 之前)
    包括是这样的:
    在 StateMachine.h
    #ifndef SM_H
    
    #define SM_H
    
    #include <map> 
    
    /* (different includes) */
    
    #include Logger.h
    
    在 Logger.h
    #include SharedMemory.h
    
    在 SharedMemory.h
    #include StateMachine.h
    
    我想知道是否有任何技巧可以使包含以这种方式工作,而无需进行架构更改(我的经理似乎不喜欢)。

    最佳答案

  • 尝试将包含从头文件移动到源 (*.cpp) 文件
  • 使用前向声明:What are forward declarations in C++?
  • 更改接口(interface)以使用指针或对所需类型的引用而不是使用实际类型,以便使用前向声明(如果需要)
  • 关于c++ - 包含中的递归(文件 1 包含包含文件 1 的文件 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63171287/

    相关文章:

    c++ - 无法将 'const T*' 转换为 'T*&&'

    c++ - 异常能否自动提供有关其环境的详细信息?

    c - C中的头文件及其用法

    在C中使用自己的头文件调用函数

    c++ - 无法理解 map 在 c++ 中的用法

    c++ - C++ 中的洗牌 vector

    java - 在 log4j 上集成 slf4j 时出错

    logging - 我可以为 Spring Boot 应用程序配置启动和关闭日志吗?

    ios - iOS 构建中未显示 Unity 调试日志

    c++ - 如何在 C++ 中集成 Google 稀疏哈希