我有一个基类,它包含一个抽象方法func(int, float, unsigned)
和一个重载此方法func(int)
,以及一个实现抽象方法的Derived类
class Base
{
public:
virtual void func(int x, float y, unsigned z) = 0;
void func(int x)
{
cout << "func with x only" << endl;
}
};
class Derived : public Base
{
public:
void func(int x, float y, unsigned z)
{
cout << "func override" << endl;
}
};
在我的代码中,我有一个派生类的实例,它调用基类func(int)
的重载方法。
int main()
{
Derived d;
d.func(10); // <<--------- 'COMPILATION ERROR'
return 0;
}
在编译这段代码时,我收到以下编译错误:
error: no matching function for call to 'Derived::func(int&)'
note: candidates are: virtual void Derived::func(int, float, unsigned int)
出现此错误的原因是什么/为什么此代码不起作用?
答案 0 :(得分:2)
您需要将基类功能带入派生类&#39; 命名空间
通过写
来做到这一点using Base::func;
你孩子班级宣言中的某个地方。
请注意,重载 func
,而不是覆盖。
答案 1 :(得分:0)
在c ++ 11中:
int main()
{
Base && b = Derived();
b.func(10);
return 0;
}