我有一个带虚函数的基类 - int Start(bool)
在派生中,有一个具有相同名称但具有不同签名的函数 -
int Start(bool, MyType *)
但不虚拟
在派生的Start()
中,我想调用基类Start()
int Derived::Start(bool b, MyType *mType)
{
m_mType = mType;
return Start(b);
}
但它给出了编译错误。
"Start' : function does not take 1 arguments"
但Base::Start(b)
无效
在C#中,上述代码可以正常工作,即解析呼叫时不需要引用Base。
如果呼叫如下,则在外部
Derived *d = new Derived();
bool b;
d->Start(b);
它失败并显示以下消息:
Start : function does not take 1 arguments
但在C#中,同样的情景也适用。
据我所知,虚拟机制无法用于解析调用,因为这两个函数具有不同的签名。
但电话未按预期得到解决。
请帮忙
答案 0 :(得分:4)
您的两个选项是添加using Base::Start
以解决Start
int Derived::Start(bool b, MyType *mType)
{
using Base::Start;
m_mType = mType;
return Start(b);
}
或者如您所述,添加Base::
前缀。
int Derived::Start(bool b, MyType *mType)
{
m_mType = mType;
return Base::Start(b);
}
答案 1 :(得分:3)
这是由于名称隐藏。
当您在派生类中声明一个与基类中的函数同名的函数时,基类版本将被隐藏,并且无法通过非限定调用访问。
您有两种选择:完全符合Jenkins CI
之类的通话资格,或者在您的班级中加入Base::Start(b)
声明:
using