处理父/子类关系中的循环包含

时间:2010-11-15 12:34:35

标签: c++ circular-dependency

假设我创建了一个类Parent,它与Child具有组合关系。父类包含一个子列表。

我希望所有孩子都拥有对父母的引用,因此每个孩子都持有Parent指针。

这将导致循环包含。我在 parent.h 中引用了Child,我在 child.h 中引用了Parent。因此,Parent需要包含Child,其中需要包含Parent

解决这个问题的最佳方法是什么?

2 个答案:

答案 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}}方法。