2

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

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;for 在 SubclassB 中是否有效,但无论如何它并没有解决问题。

4

2 回答 2

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,因此您现在必须解决这个问题。

(更新)

于 2013-01-09T12:59:51.273 回答
1

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

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

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

于 2013-01-09T13:00:08.643 回答