C ++。 Child继承自Parent,并作为Parent属性包含在内

时间:2012-04-17 10:18:40

标签: c++ inheritance parent-child forward-declaration circular-dependency

我有一个非常简单的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或前向声明,但似乎没有任何帮助。我想这不是一个非常复杂的问题,但它开始令人沮丧 任何想法?
提前谢谢!

3 个答案:

答案 0 :(得分:4)

你正在尝试不可能的事。您可以通过将Parent:Parent的实现移动到实现文件来修复错误,但您的代码仍然是灾难性的。

构建一个Parent需要构建一个OlderSon并构建一个OlderSon也需要构建一个Parent(因为OlderSon 一个Parent)。你会有无限的递归。

你不能同时使用Parent的构造函数调用OlderSon的反之亦然!

答案 1 :(得分:0)

为什么不将子指针定义为Parent * like;

class Parent
{
private :
    Parent* _os;
.
.
.
}

由于孩子的基类是父母。

答案 2 :(得分:0)

Parent()构造函数使用OlderSon()的构造函数。 但它不知道OlderSon,因为你只是向前声明它。 (这意味着:我将使用一个名为OlderSon的类,但所有你(Parent.hxx)必须知道它的名字,因为在这个Header文件中我只使用指向它的指针。) 尝试在包含OlderSon.hxx

的cxx文件中实现Parent()构造函数

修改

我监督了OlderSon继承自Parent ...这导致无限递归的事实,这可能不是你想要的。