递归包含(文件 1 包含文件 2,文件 2 包含文件 1)

Recursion in includes (file 1 includes file 2 that includes file1)

我一直在四处寻找,但没有发现任何真正能帮助我解决这个问题的问题。我不是很有经验,所以这个问题可能是微不足道的,这是我知识不足的问题。

我正在尝试解决一个问题。我们的系统有一个记录器,它获取不同的日志并将它们放入 SharedMemory.

但是,从我们的一个 classes (a StateMachine) 我不能使用 Loogger 因为递归:

如果我在StateMachine.h中包含Logger.h,编译错误随处可见。首先,我试图通过创建第二个 SharedMemory 来解决这个问题,该 SharedMemory 专门用于 Logger 并且不包括 StateMachine.h.

通过这种方法,编译错误得到解决,但我的经理不喜欢这种设计方案。

我也尝试过更改包含顺序,并在包含之前声明 class 但它不起作用(例如声明 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

我想知道是否有任何技巧可以使包含以这种方式工作,而无需架构更改(我的经理似乎不喜欢)。

  1. 尝试将包含从头文件移动到源 (*.cpp) 文件
  2. 使用前向声明:What are forward declarations in C++?
  3. 更改接口以使用指针或对所需类型的引用而不是使用实际类型,以便可以使用前向声明(如果需要)