C で互いのインスタンスを共有するクラスの作成
C で 2 つのクラスを作成しようとする場合、各クラスには次のオブジェクトが必要です。他のクラスをメンバーとして使用すると、コンパイル エラーが発生する可能性があります。これは、オブジェクトを直接含めるとメモリ割り当てで無限ループが発生するためです。
解決策: ポインタをクラス メンバーとして使用する
この問題を回避するには、直接オブジェクトではなくクラス メンバーとしてポインタを作成します。このアプローチには、完全な定義を提供せずにクラスの存在を通知する前方宣言が含まれます。
bar.h の場合:
#ifndef BAR_H #define BAR_H class foo; // Forward declare foo class bar { public: foo* getFoo(); protected: foo* f; }; #endif
foo.h の場合:
#ifndef FOO_H #define FOO_H class bar; // Forward declare bar class foo { public: bar* getBar(); protected: bar* f; }; #endif
それぞれの .cpp ファイルに、他のクラスのヘッダーを含めます:
// foo.cpp #include "foo.h" #include "bar.h" // bar.cpp #include "bar.h" #include "foo.h"
このアプローチは失敗します循環参照ループにより、ポインタを介して相互のインスタンスを利用するクラスの作成が可能になります。
以上がC で相互のインスタンスを共有するクラスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。