• ベストアンサー

お互いをメンバに持つようなクラスの宣言

同じヘッダファイル内で class CHoge { CPiyo piyo; //この段階ではCPiyoがわからない }; class CPiyo { CHoge hoge; //こっちを先にしてもCHogeがわからない }; といったようにお互いのオブジェクトをメンバに持つようなクラスを宣言したいのですが、CHogeの宣言を解釈する段階ではCPiyoが宣言されていないので、エラーになります。 そもそも、こういうことってできないのでしょうか?

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

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

お互いに相手のクラスの実体を持つことはできません。(インスタンスを生成するときに、クラス定義が再帰してしまいますね) こういった場合、参照またはポインタの形でメンバにする必要があります。 class CPiyo; class CHoge { CPiyo* piyo; }; class CPiyo { CHoge* hoge; };

matico
質問者

お礼

明瞭でわかりやすい回答でした。 やりたかったことができました。 ありがとうございます。 ついでで申し訳ないですけど、 最初の class CPiyo; はあとで定義してありますよっていう意味なんでしょうか?

その他の回答 (1)

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

> 最初の > class CPiyo; > はあとで定義してありますよっていう意味なんでしょうか? 厳密に言えば違いますが、大体そんな感じだと考えて問題ありません。 class CPiyo;のように宣言した型は不完全型なので、インスタンスを作ることはできませんが、ポインタや参照型を使うことは可能です。

matico
質問者

お礼

不完全型というのは、初めて知りました。また手持ちの参考書を調べてみます。 わかりやすい回答ありがとうございました。

関連するQ&A

専門家に質問してみよう