假设我创建了一个类Parent
,它与Child
具有组合关系。父类包含一个子列表。
我希望所有孩子都拥有对父母的引用,因此每个孩子都持有Parent
指针。
这将导致循环包含。我在 parent.h 中引用了Child
,我在 child.h 中引用了Parent
。因此,Parent
需要包含Child
,其中需要包含Parent
。
解决这个问题的最佳方法是什么?
答案 0 :(得分:8)
你必须使用前瞻声明:
//parent.h
class Child; //Forward declaration
class Parent
{
vector<Child*> m_children;
};
//child.h
class Parent; //Forward declaration
class Child
{
Parent* m_parent;
};
答案 1 :(得分:3)
由于只有Parent
的指针存储在Child
类中,因此无需在#include "parent.h"
文件中执行child.h
。使用class Parent;
中child.h
的转发声明,而不是在parent.h
中放置child.cpp
。在子文件#include "parent.h"
的源文件中,您可以Parent
使用{{1}}方法。