Parent
と合成関係を持つクラス、たとえば を作成したとしChild
ます。親クラスは、子のリストを保持します。
すべての子が親への参照を保持するようにしたいので、すべての子がParent
ポインターを保持します。
これにより、循環包含が発生します。parent.h で参照しChild
、child.hで参照Parent
します。したがって、Parent
を含めるChild
必要があります。これには を含める必要がありますParent
。
これを回避する最善の方法は何ですか?
Parent
と合成関係を持つクラス、たとえば を作成したとしChild
ます。親クラスは、子のリストを保持します。
すべての子が親への参照を保持するようにしたいので、すべての子がParent
ポインターを保持します。
これにより、循環包含が発生します。parent.h で参照しChild
、child.hで参照Parent
します。したがって、Parent
を含めるChild
必要があります。これには を含める必要がありますParent
。
これを回避する最善の方法は何ですか?
前方宣言を使用する必要があります。
//parent.h
class Child; //Forward declaration
class Parent
{
vector<Child*> m_children;
};
//child.h
class Parent; //Forward declaration
class Child
{
Parent* m_parent;
};
クラス内にはポインタのみParent
が格納されるため、ファイル内でChild
a を実行する必要はありません。そこに inclding する代わりに、 inの前方宣言を使用します。child ie のソースファイルでは、メソッドを使用することができます。#include "parent.h"
child.h
class Parent;
child.h
parent.h
child.cpp
#include "parent.h"
Parent