我经常发现自己处于这样的情况下,由于一些错误的设计决策(由其他人做出的:)导致C ++项目中出现多个编译/链接器错误,这导致不同头文件中C ++类之间的循环依赖(也可能发生)在同一文件中)。但是幸运的是(?)发生的次数并不多,以至于我下次再次遇到该问题时仍记得该问题的解决方案。
因此,为了将来方便起见,我将发布一个具有代表性的问题及其解决方案。当然,更好的解决方案是受欢迎的。
A.h
class B; class A { int _val; B *_b; public: A(int val) :_val(val) { } void SetB(B *b) { _b = b; _b->Print(); // COMPILER ERROR: C2027: use of undefined type 'B' } void Print() { cout<<"Type:A val="<<_val<<endl; } };
B.h
#include "A.h" class B { double _val; A* _a; public: B(double val) :_val(val) { } void SetA(A *a) { _a = a; _a->Print(); } void Print() { cout<<"Type:B val="<<_val<<endl; } };
main.cpp
#include "B.h" #include <iostream> int main(int argc, char* argv[]) { A a(10); B b(3.14); a.Print(); a.SetB(&b); b.Print(); b.SetA(&a); return 0; }