• 締切済み

試作クラス使用C++プログラムが動かない原因

試しに作成した以下のプログラムにビルドエラーが発生し,困っているので質問しました. コンパイラは,「BBB *b」などクラスポインタ変数の部分がエラーと指摘しているのですが(他にも数か所ありますが…),間違っている理由が分からず困ってます. ご回答,よろしくお願い致します. ----------------------------------- #include <iostream> using namespace std; class AAA { public: // コンストラクタ AAA(){ b = new BBB( this ); } // デストラクタ ~AAA(){ delete b; } // メンバ変数 BBB *b; int i; // メンバ関数 void displayB(){ b->displayA(); } }; class BBB { public: // コンストラクタ BBB( AAA *a ){ this->a = a; } // デストラクタ ~BBB(){} // メンバ変数 AAA *a; int j; // メンバ関数 void displayA(){ printf( "%d\n", a->i ); } }; int main() { // 変数の定義 AAA a; // 変数の初期化 a.i = 2; a.b->j = 5; // 出力 printf( "%d\n", a.i ); a.b->displayA(); return 0; } -----------------------------------

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

あと, よく考えればわかりますが AAA::displayB と BBB::displayA の少なくとも一方はクラス定義の外に出す必要があります.

  • unacyo
  • ベストアンサー率51% (35/68)
回答No.2

ANo.1さんの言う通り、上から処理するので、class Aを処理する時点ではBBBは未定義になります。 コンパイラが何か解らないので使えるか分かりませんが、下記を試してみてください。 ・class AAA の定義の前に"class BBB;"を入れる ・class AAAの中の"BBB* b"を、"class BBB* b;"にする ・諦めて、void*にしておいて、セット/参照する度にキャストする

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

コンパイラは基本的に上から処理します. 「エラーが出た時点」での BBB って何?

関連するQ&A