首頁 >後端開發 >C++ >當類別相互引用時,如何處理 C 中的循環頭依賴關係?

當類別相互引用時,如何處理 C 中的循環頭依賴關係?

Susan Sarandon
Susan Sarandon原創
2024-10-26 12:25:29461瀏覽

How to Handle Circular Header Dependencies in C   When Classes Reference Each Other?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn