2016-06-16 2 views
1

私はVisual Studio 2015コミュニティ版で自分のプロジェクトをやっています。スーパークラスに派生クラスのポインタがありませんか?

2つのクラスを作成したいと思います。

class A { 
    B* b; 
    public: 
    //several method... 
}; 
class B : public A { 
    public 
    //several method... 
}; 

これは可能ですか?

エラーコードC2504を受け取ります。 しかし、私はこのエラーメッセージを英語に翻訳できません。

このエラーメッセージは表示されません。


二つのクラスを分離し、各クラス.hファイルはA.hおよびその逆「B.h」を含む、例えば、他の.hファイル が含まれます。


セミコロンを追加するのを忘れてしまいました。

+1

[フォワード宣言](https://en.wikipedia.org/wiki/Forward_declaration)を確認してください。 – 101010

+0

私はC2061も持っています。識別子AとBの構文エラー – arubirate

+0

'B'を前方宣言し、クラス宣言の後にセミコロンを置く必要があります。 – md5i

答えて

1

はちょうどあなたが他のヘッダの各ヘッダを含めるべきではありません

class A { 
    class B* b; 
    ^^^^^ 
    public: 
    //several method... 
}; 
^^ 
class B : public A { 
    public 
    //several method... 
}; 
^^ 

それとも

class B; 
^^^^^^^^ 
class A { 
    B* b; 
    public: 
    //several method... 
}; 
class B : public A { 
    public 
    //several method... 
}; 

を書きます。それ以外の場合、クラスは2回定義されます。

+0

うわー、それは動作します、ありがとう! – arubirate

+0

@arubirateいいえ: –

+1

ヘッダーを含めて複数の定義がある場合、これらのクラスは複数のヘッダーに依存することはできません。それを防ぐためにガードを使用する必要があります。しかし、OPはそれをしてはならないと言っているわけではありません。これを行うには完全に冗長です。実際には1つのヘッダー*が他のヘッダーに依存する場合は、循環包含によって誤った順序でインクルードされる可能性があります。 – user2079303

関連する問題