- ベストアンサー
互いのクラスで互いのクラスのポインタを持ち合う方法
◆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です。 どうすれば実現できるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ヘッダファイルをインクルードするのではなく、先行宣言だけにしましょう。 class Choge; class Cfuga;
その他の回答 (2)
- don_go
- ベストアンサー率31% (336/1059)
クラスに限らずモジュール同士が相互依存する関係は 設計的に見てもプログラム的に見ても良くないので 他の方法を検討することをお薦めします。
- sakusaker7
- ベストアンサー率62% (800/1280)
> 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; }
お礼
ご回答ありがとうございます。 先行宣言だけでも引っかかるようなのでインクルードもしたところうまくいきました。