互いに参照しあうクラス

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MNS

互いに参照しあうクラス

#1

投稿記事 by MNS » 16年前

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();
};
とすると、エラーが出てしまいます。
どなたか、回答お願いします。

GPGA

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

#2

投稿記事 by GPGA » 16年前

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

class A;

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

MNS

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

#3

投稿記事 by MNS » 16年前

すばやい回答ありがとうございます!

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

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

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

GPGA

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

#4

投稿記事 by GPGA » 16年前

>----B.h----
----B.cpp----の間違いだったとして

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

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

MNS

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

#5

投稿記事 by MNS » 16年前

ああ、そうです。B.cppの間違いです・・。

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

閉鎖

“C言語何でも質問掲示板” へ戻る