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

C++ construtor with multi level inheritance

本文关键字:c++ 构造函数 继承 多级      更新时间:2023-10-16

我试图做多层继承和调用基构造函数,但编译器找不到我的基构造函数..

no overloaded function takes 8 arguments

我的代码哪里出错了?

基类构造函数的.cpp默认10个成员变量int为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内有效,但它没有解决问题。

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

见:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport

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

如果不提供任何参数,则会隐式调用超类的默认构造函数。要传递参数,必须为子类创建一个显式的参数化构造函数,如下所示——

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)
{}

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

所有这些都必须发生,因为在c++ 03标准中构造函数不能被子类继承。在支持该标准或更早版本的编译器中,它们必须由子类的构造函数显式调用。由于您的编译器似乎不支持c++ 11,您现在必须将就一下。

(更新)