递归包含(文件 1 包含文件 2,文件 2 包含文件 1)
Recursion in includes (file 1 includes file 2 that includes file1)
我一直在四处寻找,但没有发现任何真正能帮助我解决这个问题的问题。我不是很有经验,所以这个问题可能是微不足道的,这是我知识不足的问题。
我正在尝试解决一个问题。我们的系统有一个记录器,它获取不同的日志并将它们放入 SharedMemory
.
但是,从我们的一个 classes (a StateMachine
) 我不能使用 Loogger
因为递归:
Logger.h
包括 SharedMemory.h
SharedMemory.h
包括 StateMachine.h
如果我在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
我想知道是否有任何技巧可以使包含以这种方式工作,而无需架构更改(我的经理似乎不喜欢)。
- 尝试将包含从头文件移动到源 (*.cpp) 文件
- 使用前向声明:What are forward declarations in C++?
- 更改接口以使用指针或对所需类型的引用而不是使用实际类型,以便可以使用前向声明(如果需要)
我一直在四处寻找,但没有发现任何真正能帮助我解决这个问题的问题。我不是很有经验,所以这个问题可能是微不足道的,这是我知识不足的问题。
我正在尝试解决一个问题。我们的系统有一个记录器,它获取不同的日志并将它们放入 SharedMemory
.
但是,从我们的一个 classes (a StateMachine
) 我不能使用 Loogger
因为递归:
Logger.h
包括SharedMemory.h
SharedMemory.h
包括StateMachine.h
如果我在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
我想知道是否有任何技巧可以使包含以这种方式工作,而无需架构更改(我的经理似乎不喜欢)。
- 尝试将包含从头文件移动到源 (*.cpp) 文件
- 使用前向声明:What are forward declarations in C++?
- 更改接口以使用指针或对所需类型的引用而不是使用实际类型,以便可以使用前向声明(如果需要)