循環 #include 依存関係について
GameEvent、Physics、およびGameObject では、クラスの再定義を防ぎながら、必要なオブジェクトへのアクセスを許可することが重要です。 headers.
保護されていない #include の問題
保護策なしで「GameObject.h」に「Physics.h」をインクルードすると、「GameObject.h」のため再定義エラーが発生します。 h」には、すでに「Physics.h」から「GameEvents.h」が含まれています。この再定義は、プリプロセッサが「Physics.h」のコードを「GameObject.h」にコピーアンドペーストするときに発生します。
インクルード ガードの紹介
インクルード ガードは、次のマクロです。ヘッダー ファイルの重複インクルードを防ぎます。ヘッダー ファイルが 2 回インクルードされると、インクルード ガードにより 2 番目のコピーがインクルードされるのが防止されます。これにより、再定義の問題が解決されます。
入れ子になった #include の危険性
この場合、依存関係グラフは循環します。 「GameEvents.h」には「Physics.h」が含まれ、「Physics.h」には「GameObject.h」が含まれており、ループが作成されます。 #include ステートメントが無限に繰り返され、コードが過度に肥大化するため、この循環依存関係は問題を引き起こします。
解決策: 前方宣言
循環依存関係を解決するには、forward を使用します。宣言。前方宣言は、完全な定義を提供することなく、特定のクラスが存在することをコンパイラーに伝えます。 「GameEvents.h」と「GameObject.h」で「Physics」を前方宣言することで、ヘッダー ファイルは実際に互いのコードを含めることなく相互にアクセスできます。
// GameEvents.h class GameObject; class Physics;
// Physics.h #include <list> class GameObject; class Physics { public: void ApplyPhysics(GameObject*); // ... };
// GameObject.h class GameObject { public: GameObject(Vector2X position); // ... };
このようにヘッダー ファイルは、再定義の問題や循環依存関係に遭遇することなく、必要な型と関数にアクセスできます。
以上がヘッダー ファイル内の循環 #include 依存関係を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。