只要没有在类A中定义类B的成员对象,就可以不用在类A头文件中包含类B的头文件,你可以以在类A中用一个指向类B对象的指针取代定义一个类B对象的方式实现,这样,你只要在类A的头文件中声明一下类A即可,该指针的初始化放到A的实现文件中去(如构造函数中用:
pB = (B*) new B()),当然在类A的实现文件中还是要加上包含类A头件的指令。但这样已经解决了类A与类B的循环依赖问题。同理,要解决M-V-C间的循环依赖就轻而易举了。
--------------------更多细节参考《thinking in C++》
譬如 B.h 中有 class B{/*...*/},那么你可以写一个 B_fwd.h ,里面写
#ifndef B_FWD_H
#define B_FWD_H
class B;
#endif
然后在 A.h 里面包含 B_fwd.h。
要求:A.h 里面不能出现调用 B 类的代码。
只允许有指针或引用的声明。