ページ 11

互いに参照しあうクラス

Posted: 2009年3月09日(月) 18:15
by MNS
class A と class B があったとき、
クラスAがBのインスタンスを持ち、BがAのポインタを持つ。
また、クラスAとクラスBは別のヘッダファイルに存在している。
こういう条件の場合、どのようなコードを書けばいいのでしょうか?

たとえば、
----A.h----
#include "B.h"

class A
{
	B mB;
	void Print();
};

----B.h----
#pragma once

#include "A.h"

class B
{
	A* mpA;
	void Print();
};
とすると、エラーが出てしまいます。
どなたか、回答お願いします。

Re:互いに参照しあうクラス

Posted: 2009年3月09日(月) 18:20
by GPGA
----B.h----
#pragma once

class A;

class B
{
	A* mpA;
	void Print();
};
 

Re:互いに参照しあうクラス

Posted: 2009年3月09日(月) 18:28
by MNS
すばやい回答ありがとうございます!

前方宣言というものですよね。
聞くべきだったのは、こちらの方だったのかもしれません。
たとえば、そのようなコードを書いた場合、
----B.h----
#include "B.h"

void B::Print()
{
	mpA->Print();
}
このように、クラスAのprint関数をクラスBのprint関数で使おうとすると、
「認識できない型 'A' が使われています」というようなエラーが発生します。
(※AのPrint関数はpublicであるとします)

重ねて質問することになってしまい、申し訳ないです。回答お願いします。

Re:互いに参照しあうクラス

Posted: 2009年3月09日(月) 18:54
by GPGA
>----B.h----
----B.cpp----の間違いだったとして

#include "B.h"
#include "A.h"

void B::Print()
{
	mpA->Print();
}
 

Re:互いに参照しあうクラス

Posted: 2009年3月09日(月) 19:19
by MNS
ああ、そうです。B.cppの間違いです・・。

そのようにしたら、見事、実行できました!
ご回答ありがとうございました。