C の相互依存クラス : 前方宣言の利用
互いの型のオブジェクトを含む 2 つのクラスを作成しようとすると、次の問題が直接発生します。無限再帰。これを実現するには、ポインターと前方宣言を使用した回避策が必要です。
提供されたシナリオでは、foo クラスと bar クラス間の循環依存関係によりエラーが発生しています。これを解決するために、前方宣言を使用して、各クラスを定義せずにその存在を通知します。
// bar.h #ifndef BAR_H #define BAR_H // Declares the existence of foo without defining it class foo; class bar { public: foo* getFoo(); protected: foo* f; }; #endif
// foo.h #ifndef FOO_H #define FOO_H // Declares the existence of bar without defining it class bar; class foo { public: bar* getBar(); protected: bar* f; }; #endif
これらの前方宣言により、foo ヘッダーと bar ヘッダーを独立させることができ、循環参照を回避できます。ポインター メンバーを含む各クラスの完全な定義は、それぞれの .cpp ファイルで提供されます。
使用例:
#include "foo.h" #include "bar.h" int main(int argc, char **argv) { foo myFoo; bar myBar; }
ここでプログラム前方宣言によりクラスが間接的に相互に認識できるため、コンパイルは成功します。相互にポインタを保存できるようになり、サイクルを断ち切り、相互依存するクラスの作成が可能になります。
以上がC で無限再帰を行わずに相互依存するクラスを作成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。