C で相互にインクルードされるヘッダー
クラスが相互に参照するコードを C で作成する場合、ヘッダーのインクルードを適切に処理することが重要ですfiles.
Include Statements Placement
デフォルトでは、ヘッダー ファイルはマクロ (#ifndef ガード) 内に組み込まれ、ヘッダーが相互に参照する場合の無限再帰を防ぎます。提供された例では、#include ステートメントをマクロ内に配置することで、各クラスが他のクラスのヘッダーをインクルードするという問題が解決されます。
前方宣言
この状況では、コンパイラは、参照する A クラスの前に B クラス定義を検出します。これを解決するには、B クラス定義の前に A の前方宣言が必要です。
<code class="c++">class A; // Declare A's existence</code>
これにより、その時点で完全な定義を必要とせずに、A がクラスであることがコンパイラーに通知されます。
改訂されたコード
前方宣言とマクロ内包含の両方を組み込んだ改訂されたコードは次のとおりです:
<code class="c++">// A.h #ifndef A_H_ #define A_H_ #include "B.h" class A; // Forward declaration class A { private: B b; public: A() : b(*this) {} }; #endif /*A_H_*/ // B.h #ifndef B_H_ #define B_H_ #include "A.h" class B { private: A& a; public: B(A& a) : a(a) {} }; #endif /*B_H_*/</code>
これらのガイドラインに従うことで、クラスはそれぞれを参照できます。その他の正しくは、コンパイル エラーが発生します。
以上がクラスが相互に参照する場合、C で循環ヘッダーの依存関係を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。