Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将子类包含到基本C+中+;_C++_Inheritance - Fatal编程技术网

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我的意思是,字段是指向对象的指针。我试图通过引用我自己的答案来回答。冲床,我还在复制粘贴。。。