具有多级继承的C ++构造函数

时间:2013-01-09 12:30:00

标签: c++ inheritance constructor

我正在尝试进行多级继承并调用基础构造函数,但是编译器无法找到我的基础构造函数。

no overloaded function takes 8 arguments

我的代码中哪里出了问题?

我的基类构造函数的.cpp 默认10个成员变量ints为0

Baseclass::Baseclass(void) : m_1(0),m_2(0),
                                   m_3(0),m_4(0),
                                   m_x(0),m_y(0),
                                   m_5(0),m_5(0),
                                   m_7(0), m_8(0)
{
}

Baseclass::Baseclass(int _1,int _2,int _3, int _4, int _5,int _6, int _7, int _8)
                                 : m_1(_1),m_2(_2),
                                   m_3(_3),m_4(_4),
                                   m_x(0),m_y(0),
                                   m_5(_5),m_6(_6),
                                   m_7(_7), m_8(_8)
{
}

在我的第一个子类标题中我有

class SubclassA:
    public Baseclass
{
public:
    SubclassA(void);
    using Baseclass::Baseclass;
    ~SubclassA(void);

跟随第二个子类:

class SubclassB:
    public SubclassA
{
public:
    SubclassB(void);
    using Baseclass::Baseclass;
    ~SubclassB(void);

然后我会尝试使用以下命令初始化此类的新实例:

 SubclassB(Id,0,100,100,10,100,1,1)

我不确定using SubclassA::SubclassA;是否在SubclassB内有效,但无论如何都无法解决问题。

2 个答案:

答案 0 :(得分:1)

如果不提供任何参数,则会隐式调用超类默认构造函数。要传递参数,你必须像这样 -

创建一个子类的显式参数化构造函数
SubclassA::SubclassA(int a, int b, int c, int d, int e, int f, int g, int h) 
: Baseclass(a,b,c,d,e,f,g,h)
{}

在同一行上,使用SubclassB的构造函数为类subclassA创建另一个构造函数。您不能像Baseclass中那样使用对SubclassB的引用,因为您只能在层次结构中提供对直接超类的引用。

所有这一切都必须发生,因为构造函数不是由C ++ 03标准的C ++中的子类继承的。在支持该标准或之前的编译器中,必须由子类的构造函数显式调用它们。由于您的编译器似乎不支持C ++ 11,您现在必须使用它。

<强>(更新)

答案 1 :(得分:1)

从您的错误消息中,我猜您正在使用Visual Studio?它不支持继承构造函数。

请参阅:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport

目前Gcc 4.8似乎是唯一支持此功能的编译器。