- ベストアンサー
お互いをメンバに持つようなクラスの宣言
同じヘッダファイル内で class CHoge { CPiyo piyo; //この段階ではCPiyoがわからない }; class CPiyo { CHoge hoge; //こっちを先にしてもCHogeがわからない }; といったようにお互いのオブジェクトをメンバに持つようなクラスを宣言したいのですが、CHogeの宣言を解釈する段階ではCPiyoが宣言されていないので、エラーになります。 そもそも、こういうことってできないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お互いに相手のクラスの実体を持つことはできません。(インスタンスを生成するときに、クラス定義が再帰してしまいますね) こういった場合、参照またはポインタの形でメンバにする必要があります。 class CPiyo; class CHoge { CPiyo* piyo; }; class CPiyo { CHoge* hoge; };
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
回答No.2
> 最初の > class CPiyo; > はあとで定義してありますよっていう意味なんでしょうか? 厳密に言えば違いますが、大体そんな感じだと考えて問題ありません。 class CPiyo;のように宣言した型は不完全型なので、インスタンスを作ることはできませんが、ポインタや参照型を使うことは可能です。
質問者
お礼
不完全型というのは、初めて知りました。また手持ちの参考書を調べてみます。 わかりやすい回答ありがとうございました。
お礼
明瞭でわかりやすい回答でした。 やりたかったことができました。 ありがとうございます。 ついでで申し訳ないですけど、 最初の class CPiyo; はあとで定義してありますよっていう意味なんでしょうか?