所以我不能解决我的循环内容。任何人都可以帮我一把吗?我知道我需要预先宣布我的课程,但我无法解决这个问题(虽然大多是猜测工作)。 OtherClass
就像ParentClass
及其子女的容器一样。
我目前的班级设置如下:
class ParentClass; // includes
class ChildClass;
class OtherClass
{
ParentClass* parent;
ChildClass* child;
}
class OtherClass;
class ParentClass
{
OtherClass* other;
}
#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
子类。
答案 0 :(得分:0)
ChildClass.cpp uses things from OtherClass as well
表示你的意思并不清楚,也就是说,如果你想继承OtherClass
类型或只是组合它('有一个'对'是一个'),但您也可以使用模板使其成为各种类型的通用容器类:
#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
#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
#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
根据每个班级的确切做法,这可以为您提供更多的“可扩展”。您不必使用此方法转发声明任何内容,但它可以在其他地方添加复杂性(同样,取决于父/子关系/类的确切需要)。
希望可以提供帮助。