プロが教えるわが家の防犯対策術!

同じヘッダファイル内で

class CHoge
{
CPiyo piyo;
//この段階ではCPiyoがわからない
};

class CPiyo
{
CHoge hoge;
//こっちを先にしてもCHogeがわからない
};

といったようにお互いのオブジェクトをメンバに持つようなクラスを宣言したいのですが、CHogeの宣言を解釈する段階ではCPiyoが宣言されていないので、エラーになります。

そもそも、こういうことってできないのでしょうか?

A 回答 (2件)

お互いに相手のクラスの実体を持つことはできません。

(インスタンスを生成するときに、クラス定義が再帰してしまいますね)

こういった場合、参照またはポインタの形でメンバにする必要があります。

class CPiyo;

class CHoge
{
CPiyo* piyo;
};

class CPiyo
{
CHoge* hoge;
};
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/23 12:28

> 最初の


> class CPiyo;
> はあとで定義してありますよっていう意味なんでしょうか?

厳密に言えば違いますが、大体そんな感じだと考えて問題ありません。
class CPiyo;のように宣言した型は不完全型なので、インスタンスを作ることはできませんが、ポインタや参照型を使うことは可能です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/24 00:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!