我是继承人的新手..
#include<iostream>
using namespace std;
class base
{ public:
void show()
{
//do something here
}
};
class derive:public base
{ public:
void show(int n,int m)
{
//do something
}};
int main()
{
derive D;
D.show();
D.show(4,5);
}
所以编译器给出的错误是: 没有匹配函数来调用'derive :: show()
答案 0 :(得分:1)
编译器处理时
D.show();
首先检查show
中是否存在名称derive
。如果是,则不会在基类中查找名称。在那之后,它试图找到它的最佳匹配。在这种情况下,没有匹配,因为show
中唯一名为derive
的函数需要两个int
类型的参数。因此,
D.show();
无效。
如果您希望base::show
中的derive
可用作重载,则必须让编译器知道。
class derive : public base
{
public:
// Let the functions named show from base be available
// as function overloads.
using base::show;
void show(int n,int m)
{
cout<<"Derive Version.."<<n<<","<<m<<endl;
}
};
现在,您可以使用:
int main()
{
derive D;
D.show();
D.show(4,5);
}
答案 1 :(得分:1)
编译器是正确的。在derive
类中没有函数show()
。我猜你想要的是访问base
类函数。为此,您必须指定它是基类,而不是派生类。要做到这一点,您需要做的就是基类的范围如下所示:
derive D;
D.base::show(); //Uses the bases function
D.derive::show(4,5); // Uses the derived function
D.show(4,5); // Uses the derived function