c++ - 头文件和多类用法(编辑 : forward declarations)

标签 c++ file class header include

我有几个头文件的问题,我需要将它们中的每一个都包含在彼此中。显然,这是做不到的,因为当我编译时,会抛出“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/

相关文章:

c - (C编程)逐字符读取文本文件并删除点和逗号前的空格和连字符

java - 在 Java 中拆分和合并大文件(大小以 GB 为单位)

c++ - 如何用模板解决这个循环继承问题?

c++ - 未解析的外部符号静态变量(标题中定义的方法使用的变量)

c++ - "Sorted:[space]"后面没有输入号码,如何去掉空格?

c++ - 在使用 get line() 之前如何使用 ignore()、sync() 或 clear() 清除任何数据?

javascript - TypeError 无法设置属性 'size of' 未定义

c++:如何在没有回车的情况下打印新行

CSS 选择器获取前面的兄弟

python - Tkinter ;新类(class)中的顶级