我正在尝试进行多级继承并调用基础构造函数,但是编译器无法找到我的基础构造函数。
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内有效,但无论如何都无法解决问题。
答案 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似乎是唯一支持此功能的编译器。