我有三个班:
BaseClass
,其中包含ElementClass
字段
ElementClass
,其中BaseClass
为字段,ChildClass
为返回类型(指针)
ChildClass
,这是继承自BaseClass
。
当我试图编译这个时,我得到了
expected class-name before '{' token
对于ChildClass
中包含的ElementClass
已包含在BaseClass
中。
我明白了,为什么会这样。因为我试图从不存在继承子类,对于编译器,类BaseClass
我无法理解这个问题。谢谢。
以下是此问题的代码示例
的 BaseClass.h
#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H
#include "ElementClass.h"
class ElementClass;
class BaseClass
{
private:
ElementClass *m_someField;
};
#endif
的 ElementClass.h
#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H
#include "ChildClass.h"
class ChildClass;
class ElementClass
{
private:
ChildClass *m_class;
};
#endif
的 ChildClass.h
#ifndef INHERITTEST_CHILDCLASS_H
#define INHERITTEST_CHILDCLASS_H
#include "BaseClass.h"
class ChildClass : public BaseClass
{
};
#endif
答案 0 :(得分:0)
BaseClass,包含ElementClass作为字段
ElementClass,包含BaseClass作为字段
因此,BaseClass
实例包含一个ElementClass
实例,其中包含一个BaseClass
实例,其中包含一个ElementClass
实例,其中包含...实例一直向下。一个实例将使用你所有的记忆然后一些。那不行。
它也无法工作,因为在定义第一个类时,您需要有第二个类的完整定义,这需要第一个类的完整定义,但尚未定义。
您必须使用间接。至少有一个类不能包含其他实例,而是包含指针或对实例的引用。