いくつかの悪い設計上の決定(他の誰かによって行われた:))が原因で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; }