C 中相互包含的標頭
在C 中創建類別相互引用的程式碼時,正確處理標頭包含至關重要
包含語句放置
預設情況下,頭檔包含在巨集中(#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>
透過遵循這些準則,類別可以引用每個其他正確,evitando 編譯錯誤。
以上是當類別相互引用時,如何處理 C 中的循環頭依賴關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!