使用前向声明可以在不循环包含的情况下包含多个相关类。前向声明可以简单地告诉编译器将来会有一个类的定义,从而让我们在使用该类之前就可以引用它。
例子: 在头文件中声明类A,B,C和D,它们相关并需要相互引用:
// A.h
#ifndef A_H #define A_H
// 前向声明 class B; class C; class D;
class A { public: B* b; C* c; D* d; };
#endif
// B.h
#ifndef B_H #define B_H
// 前向声明 class A; class C; class D;
class B { public: A* a; C* c; D* d; };
#endif
// C.h
#ifndef C_H #define C_H
// 前向声明 class A; class B; class D;
class C { public: A* a; B* b; D* d; };
#endif
// D.h
#ifndef D_H #define D_H
// 前向声明 class A; class B; class C;
class D { public: A* a; B* b; C* c; };
#endif
通过前向声明,每个头文件中都可以引用其他头文件中的类,从而避免了循环包含的问题。