将子类包含在基本C ++中

时间:2016-03-16 17:32:43

标签: c++ inheritance

我有三个班:
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

1 个答案:

答案 0 :(得分:0)

  

BaseClass,包含ElementClass作为字段

     

ElementClass,包含BaseClass作为字段

因此,BaseClass实例包含一个ElementClass实例,其中包含一个BaseClass实例,其中包含一个ElementClass实例,其中包含...实例一直向下。一个实例将使用你所有的记忆然后一些。那不行。

它也无法工作,因为在定义第一个类时,您需要有第二个类的完整定义,这需要第一个类的完整定义,但尚未定义。

您必须使用间接。至少有一个类不能包含其他实例,而是包含指针或对实例的引用。