没有匹配的功能可以调用

时间:2018-03-10 05:42:20

标签: c++ c++11 inheritance

我是继承人的新手..

#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()

2 个答案:

答案 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