与父母,子女和其他人的循环包含

时间:2015-12-16 10:06:28

标签: c++ circular-dependency

所以我不能解决我的循环内容。任何人都可以帮我一把吗?我知道我需要预先宣布我的课程,但我无法解决这个问题(虽然大多是猜测工作)。 OtherClass就像ParentClass及其子女的容器一样。

我目前的班级设置如下:

OtherClass.h

class ParentClass; // includes
class ChildClass;

class OtherClass
{
    ParentClass* parent;
    ChildClass* child;
}

ParentClass.h

class OtherClass;
class ParentClass
{
    OtherClass* other;
}

ChildClass.h

#include "ParentClass.h";
#include "OtherClass.h";

class ChildClass: public ParentClass
{
    other->foo(); // Using OtherClass pointer declared in parent.
}

对于上述方法,我得到Member access into incomplete type 'ParentClass'

这可能也需要扩展,因为我相信将来会有更多的ChildClass子类。

1 个答案:

答案 0 :(得分:0)

ChildClass.cpp uses things from OtherClass as well表示你的意思并不清楚,也就是说,如果你想继承OtherClass类型或只是组合它('有一个'对'是一个'),但您也可以使用模板使其成为各种类型的通用容器类:

OtherClass.h

#if !defined(OTHER_CLASS_HPP)
#define OTHER_CLASS_HPP

template < typename T1, typename T2 >
class OtherClass
{
    public: // private/protected ??
        T1* parent;
        T2* child;

        void foo()
        {
            this->parent->bar();
            this->child->baz();
            // this->parent->baz(); // compile error since no ParentClass::baz
        }
};

#endif

ParentClass.h

#if !defined(PARENT_CLASS_HPP)
#define PARENT_CLASS_HPP

#include "OtherClass.h"

template < typename T1 >
class ParentClass
{
    public:
        ParentClass() : other(new OtherClass<ParentClass, T1>) {}
        ~ParentClass() { delete this->other; }

        void bar() { }
    protected:
        OtherClass<ParentClass, T1>* other;
};

#endif

ChildClass.h

#if !defined(CHILD_CLASS_HPP)
#define CHILD_CLASS_HPP

#include "ParentClass.h"

class ChildClass : public ParentClass < ChildClass >
{
    public:
        void foo()
        {
            this->other->foo();
        }

        void baz() { }
};

#endif

根据每个班级的确切做法,这可以为您提供更多的“可扩展”。您不必使用此方法转发声明任何内容,但它可以在其他地方添加复杂性(同样,取决于父/子关系/类的确切需要)。

希望可以提供帮助。