我有几个头文件的问题,我需要将它们中的每一个都包含在彼此中。显然,这是做不到的,因为当我编译时,会抛出“include nested too deeply”错误——因为这本质上要求编译器进入一个无限的 include 循环。
我可以使用 void 指针修复它,但这对我来说似乎是糟糕的编码习惯。
这是我正在尝试做的一个例子,以帮助理解:
文件-A:
#include "File-B"
#include "File-C"
class A
{
public: B* p_B;
public: C* p_C;
};
文件-B:
#include "File-A"
#include "File-C"
class B
{
public: A* p_A;
public: C* p_C;
};
文件-C:
#include "File-B"
class C
{
public: B* p_B;
};
这仅显示需要每个类声明的位置。 void*
当然有更好的解决方案。
编辑:我已经在使用 include guards,这段代码只是为了帮助您了解我正在尝试做的事情。
最佳答案
你应该使用 include guards :
#ifndef _FILE_A_H_
#define _FILE_A_H_
// Contents of FileA.h...
#endif
可能也使用 forward declarations 打破数据结构定义之间的循环依赖。
在 FileA.h
中:
class B; // No need to #include "FileB.h"
class A
{
public:
B* pB;
};
在 FileB.h
中:
class A; // No need to #include "FileA.h"
class B
{
public:
A* pA;
};
关于c++ - 头文件和多类用法(编辑 : forward declarations),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054834/