当两个头文件a.h和b.h存在相互引用的状况时,可以在其中一个头文件预先定义类型。如:
// A.h class B; class A{ B data; public: void fun(); }; //B.h #include "A.h" class B{ public: int data; }
但是这个做法存在弊端,当系统设计逐渐庞大时,头文件的相互引用关系逐渐复杂,引用关系图中可能存在很多个相互引用的环。导致调试成本和编码成本上升。
可以采用接口类的方式避免循环引用的情况。实现一个虚基类作为接口类,其他文件引入接口类头文件,既可以防止循环引用关系泛滥造成的心智负担,也可以明确的规划各个子系统之间的联系。