- 締切済み
基本クラスに派生クラスのインスタンスを持たせたいのですが.....
A.h//////// #pragma once #include "B.h" class A{ B* b; } B.h/////// #pragma once #include "A.h" class B : public A{ } ////////////// 上のようなクラス構成にさせたいのですが..... #include "A.h"をB.hに追加したところでエラーが出ます。 基本クラスに派生クラスのインスタンスを持たせたいのですが.... どのようにすれば良いでしょうか? エラー内容は : error C2143: 構文エラー : ';' が '*' の前にありません。 : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません この三つが出ます。 何方かよろしくお願いしますm(_ _)m
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ldir
- ベストアンサー率0% (0/2)
///@file A.h class B; //B の前方宣言 class A { //Bへのポインタの宣言には Bクラスの完全な定義はいらない。 B* b; //その他 void func1(const B& ); //Bの参照の宣言には 完全な定義はいらない。 B func2(); //"Bクラスのオブジェクトを返す関数の宣言"にもいらない。 }; ///@file B.h #include "A.h" //Aクラスの定義を導入 class B : public A //継承するには基底クラスの定義が必要。 { /* ... */ }; ///@file A.cpp #include "A.h" #incldue "B.h" // Bクラスの定義を導入 void A::func1( const B& other ) { //B用のメモリを確保したり、BをコンストラクトするにはBクラスの定義が必要。 b = new B(other); //Bのメンバ関数呼び出しには Bクラスの定義が必要。 b->foo(); } B A::func2() { //Bを返す関数の定義には Bクラスの定義が必要。 return *b ; }
お礼
解決しました!!ありがとうございます。 A.hで派生クラスBをincludeしていないのにBを宣言出来るのですね.... 大変勉強になりました。ありがとうございます。