前方宣言クラス、クラスの再定義

グレフィン28

したがって、2つのクラスがあり、クラスAとBと呼びましょう。これらのクラスの内部には、関数の引数として相互に参照があります。私が前方宣言しようとすると、次のように宣言します。

// A.h (Header guarded)
namespace ns {
    class B { // Attempt to forward declare B
    public:
        int getRand();
    };

    class A {
    public:
        float a, b;

        void aFunc(B &b);       
    };
}

// B.h (Header guarded)
namespace ns {
    class A { // Attempt to forward declare A
    public:
        float a, b;
    };

    class B {
    public:
        void bFunc(A &a);
        int getRand();
    };
}

問題は、これを行うと'class' type redefinitionエラー発生したということです。私は解決策を探していましたが、まだ解決策に到達していません。私はこれを正しくやっていますか?私はそうではないと思いますが、ここでどこで間違ったことをしたのか教えてもらえますか?

ソンユアンヤオ

それらは前方宣言ではなく、間違いなく定義です。

あなたがすべき

// A.h (Header guarded)
namespace ns {
    class B; // forward declare B

    class A {
    public:
        // Some functions with B references as arguments        
    };
}

そして、それは同じですB.h

状況に応じて、宣言されたクラスをパラメーターとして転送するメンバー関数がいくつかあります。メンバー関数の宣言を.hファイルに残し、それらの定義を.cppファイルに指定できます。といった

// A.h (Header guarded)
namespace ns {
    class B; // forward declare B
    class A {
    public:
        float a, b;
        void aFunc(B &b);       
    };
}

// B.h (Header guarded)
namespace ns {
    class A; // forward declare A
    class B {
    public:
        void bFunc(A &a);
        int getRand();
    };
}

// A.cpp
#include "A.h"
#include "B.h"
namespace ns {
    void A::aFunc(B& b) { /* ... */ }
}

// B.cpp
#include "A.h"
#include "B.h"
namespace ns {
    void B::bFunc(A& b) { /* ... */ }
    int B::getRand() { /* ... */ }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

前方宣言を使用したクラス再定義の問題

分類Dev

クラスの前方宣言?

分類Dev

typedefクラスの前方宣言

分類Dev

再定義エラーをスローする構造体の前方宣言

分類Dev

エラー:クラスの再定義

分類Dev

C ++-'クラス'型の再定義

分類Dev

C ++ 'クラス'型の再定義

分類Dev

'DemoProject :: Logger': 'クラス'型の再定義

分類Dev

クラス C++ の再定義

分類Dev

C ++でのネストされた型/クラスの前方宣言

分類Dev

QDateクラスの前方宣言でエラーが発生する

分類Dev

(ネストされたクラスではなく)クラス内の前方宣言

分類Dev

クラス内の列挙型の前方宣言?

分類Dev

覆瓦クラスのフレンド関数のc ++前方宣言

分類Dev

子クラスのObjective-Cでの前方宣言

分類Dev

クラスの前方宣言/不完全な型の無効な使用

分類Dev

クラス内の列挙型前方宣言は可能ですか?

分類Dev

構造体とクラスとしての前方宣言

分類Dev

サブクラス化時の前方宣言と#import

分類Dev

C ++クラスメソッドの前方宣言

分類Dev

クラス/構造体の設計; 継承と前方宣言

分類Dev

Rails:クラスを再定義する方法

分類Dev

Rails:クラスを再定義する方法

分類Dev

エラーC2011: '': 'クラス'型の再定義

分類Dev

奇妙なクラスの再定義エラー

分類Dev

クラスタイプの再定義エラー

分類Dev

C ++エラーを解決する方法:「クラス」の再定義

分類Dev

C ++でのエラー:クラスコンストラクターの再定義

分類Dev

std :: vectorの宣言は、前方宣言されたクラスで機能します。

Related 関連記事

ホットタグ

アーカイブ