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

C++初心者です。相互参照するクラス(構造体?)の作り方で悩んでいます。一般的な相互参照の解決法は沢山のサイトに載っているのですが・・・

よくある相互参照と解決法

---------------------
struct Test2;

struct Test1{
Test2 *t2;
};

struct Test2{
Test1 *t1;
};
---------------------

これはtest1の中でtest2を使いたい時にその前に名前だけとりあえず宣言しておけばOK(wave)、というもの。(間違ってたらご指摘お願いします。)

自分が現在どうすればいいか途方に暮れている相互参照

---------------------
struct Test2;

struct Test1{
int n;
Test2 *t2;
void Func1(Test2 *t2){
this->t2->m = 777;
}
};

struct Test2{
int m;
Test1 *t1;
void Func2(Test1 *t1){
this->t1->n = 777;
}
};
---------------------

ここでは各メンバ関数内でお互いのメンバを参照します。このときのエラーは、
「Test2のメンバは宣言されていないので、mはTest2のメンバではありません。」
です。これは
this->t2->m = 777;
の行に対するエラーです。
struct Test2;
の行でメンバまで宣言することができません。
どうすれば「Test2の中にmというメンバがあるって後で教えてあげるからちょっとまって」とコンパイラに伝えられるのか、教えてください。お願いします!

A 回答 (1件)

プロトタイプ宣言だけ書く。

定義は別途書く

struct Test1{
int n;
Test2 *t2;
void Func1(Test2 *t2);
};

(Test2略)

void Test1::Func1(Test2 *t2){
this->t2->m = 777;
}

インラインにしたかったら、inlineキーワードを使う
    • good
    • 0
この回答へのお礼

おおおおお!
本当にスッキリしました。ありがとうございます。

お礼日時:2012/03/19 22:03

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