C++ 将子类包含到基本C+中+;
我有三门课:C++ 将子类包含到基本C+中+;,c++,inheritance,C++,Inheritance,我有三门课: BaseClass,它包含ElementClass作为字段 ElementClass,它包含BaseClass作为字段和ChildClass作为返回类型(指针) ChildClass,它继承自BaseClass 当我试图编译这个时,我得到了 在“{”标记之前应该有类名 对于ChildClass,包含在ElementClass中,包含在BaseClass中 我理解,为什么会发生这种情况。因为我试图从不存在的类继承子类,对于编译器,类BaseClass 我无法理解如何修复此问题。谢谢。
BaseClass
,它包含ElementClass
作为字段ElementClass
,它包含BaseClass
作为字段和ChildClass
作为返回类型(指针)ChildClass
,它继承自BaseClass
当我试图编译这个时,我得到了
在“{”标记之前应该有类名
对于
ChildClass
,包含在ElementClass
中,包含在BaseClass
中我理解,为什么会发生这种情况。因为我试图从不存在的类继承子类,对于编译器,类
BaseClass
我无法理解如何修复此问题。谢谢。
下面是这个问题的代码示例
基类.h
#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H
#include "ElementClass.h"
class ElementClass;
class BaseClass
{
private:
ElementClass *m_someField;
};
#endif
#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H
#include "ChildClass.h"
class ChildClass;
class ElementClass
{
private:
ChildClass *m_class;
};
#endif
#ifndef INHERITTEST_CHILDCLASS_H
#define INHERITTEST_CHILDCLASS_H
#include "BaseClass.h"
class ChildClass : public BaseClass
{
};
#endif
ElementClass.h
#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H
#include "ElementClass.h"
class ElementClass;
class BaseClass
{
private:
ElementClass *m_someField;
};
#endif
#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H
#include "ChildClass.h"
class ChildClass;
class ElementClass
{
private:
ChildClass *m_class;
};
#endif
#ifndef INHERITTEST_CHILDCLASS_H
#define INHERITTEST_CHILDCLASS_H
#include "BaseClass.h"
class ChildClass : public BaseClass
{
};
#endif
ChildClass.h
#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H
#include "ElementClass.h"
class ElementClass;
class BaseClass
{
private:
ElementClass *m_someField;
};
#endif
#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H
#include "ChildClass.h"
class ChildClass;
class ElementClass
{
private:
ChildClass *m_class;
};
#endif
#ifndef INHERITTEST_CHILDCLASS_H
#define INHERITTEST_CHILDCLASS_H
#include "BaseClass.h"
class ChildClass : public BaseClass
{
};
#endif
BaseClass,包含ElementClass作为字段
ElementClass,包含基类作为字段
因此,一个BaseClass
实例包含一个ElementClass
实例,该实例包含一个BaseClass
实例,该实例包含一个ElementClass
实例,该实例一直包含…个实例。一个实例将使用您所有的内存,然后是一些。这无法工作
它也不能工作,因为在定义第一个类时,您需要对第二个类有一个完整的定义,第二个类需要对第一个类有一个完整的定义,而第一个类还没有定义
您必须使用间接寻址。至少一个类中不能包含另一个实例,而是一个指针或实例引用。related/dupe:1.听起来您的类设计可能需要更多的工作,2.转发声明。3.显示实际代码,而不是描述代码的外观。如果
BaseClass
包含一个代码> ElementClass < /Cord>字段,如果<代码> ElementClass < /C>包含一个代码> BaseClass < /Cord>字段,程序不正确,不编译。C++只接受成员的完全定义类。@ SergBaleLista我的意思是,字段是指向对象的指针。我试图通过引用我自己的答案来回答。冲床,我还在复制粘贴。。。