我有一个非常简单的Child-Parent关系,其中OlderSon从Parent继承,而Parent则有一个指向其OlderSon的指针,例如:
#ifndef PARENT_HXX
#define PARENT_HXX
#include <iostream>
#include <string>
//#include "OlderSon.hxx"
class OlderSon;
class Parent
{
private :
OlderSon* _os;
public :
int _age;
std::string _name;
Parent(){
_name="parent name";
_age=60;
//OlderSon* _os=new OlderSon();
}
};
#endif //PARENT_HXX
和儿子:
#ifndef OLDERSON_HXX
#define OLDERSON_HXX
#include <iostream>
#include <string>
#include "Parent.hxx"
class OlderSon: public Parent
{
public:
OlderSon(){
_age=25;
_name="Olderson name";
}
};
#endif //OLDERSON_HXX
但是,每当我尝试取消注释指针已初始化
OlderSon* _os=new OlderSon();
的行时,都会收到错误消息:Parent.hxx: In constructor ‘Parent::Parent()’:
Parent.hxx:25:31: error: invalid use of incomplete type ‘struct OlderSon’
Parent.hxx:8:7: error: forward declaration of ‘struct OlderSon’
我尝试了不同的方式,即同时包括.hxx或通过前向声明进行了尝试,但似乎没有任何帮助。我想这不是一个非常复杂的问题,但是开始令人沮丧。
有任何想法吗?
提前致谢!
最佳答案
您正在尝试不可能的事情。您可以通过将Parent:Parent
的实现移动到实现文件中来修复该错误,但是您的代码仍然是灾难性的。
构造父对象需要构造一个OlderSon,而构造OlderSon也需要构造一个Parent(因为OlderSon是父对象)。您将拥有无限递归。
parent 不能同时调用OlderSon的构造函数,反之亦然!
关于c++ - C++。子级从父级继承,并作为父级属性包含,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10189331/