• ベストアンサー

互いのクラスで互いのクラスのポインタを持ち合う方法

◆hoge.h #pragma once #include "fuga.h" class Choge{ protected:  Cfuga *fuga; public:  Choge( void ){ fuga=new hoge(this); }  ~Choge(); }; ◆fuga.h #pragma once #include "hoge.h" class Cfuga{ protected:  Choge *hoge; public:  Cfuga( hoge *h ){ hoge=h; }  ~Cfuga(); }; このように互いのポインタを持ち合うようなクラスを作りたいのですが、 下記のようなエラーが出てどうにもうまくいきません。 c:\...\hoge.h(5) : error C2143: 構文エラー : ';' が '*' の前にありません。 c:\...\hoge.h(5) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません c:\...\hoge.h(5) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 環境はVisualC++2005(ExpressEdition)、WindowsXPです。 どうすれば実現できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

ヘッダファイルをインクルードするのではなく、先行宣言だけにしましょう。 class Choge; class Cfuga;

dmq
質問者

お礼

ご回答ありがとうございます。 先行宣言だけでも引っかかるようなのでインクルードもしたところうまくいきました。

その他の回答 (2)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

クラスに限らずモジュール同士が相互依存する関係は 設計的に見てもプログラム的に見ても良くないので 他の方法を検討することをお薦めします。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>  Cfuga( hoge *h ){ hoge=h; } とか >  Choge( void ){ fuga=new hoge(this); } で ナニをやりたかったのかよくわかりませんが、 てきとーに推測してみて、こんなことをしたかった? -- hoge.h #pragma once #include "fuga.h" class Choge{ protected: Cfuga *fuga; public: Choge( void ){ fuga = new Cfuga(this); } ~Choge() {}; }; -- fuga.h #pragma once class Choge; class Cfuga{ protected: Choge *hoge; public: Cfuga(Choge *h){ hoge=h; } ~Cfuga() {}; }; -- moge.cpp #include "hoge.h" #include "fuga.h" int main() { Choge h; }

関連するQ&A