ホームページ > バックエンド開発 > C++ > クラスが相互に参照する場合、C で循環ヘッダーの依存関係を処理する方法は?

クラスが相互に参照する場合、C で循環ヘッダーの依存関係を処理する方法は?

Susan Sarandon
リリース: 2024-10-26 12:25:29
オリジナル
460 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート