我有一个非常简单的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/

10-11 13:22