转载:https://blog.csdn.net/qq_26849233/article/details/77930991
在做leetcode的一个编程题的时候,出现了这个问题:reference to non-static member function must be called!
class Sum{
public:
static bool com(int a, int b){
return a>b;
}
vector findcom(vector<int>& vv){
sort(vv.begin(),vv.end(),com);
}
};
-
首先说明问题意思:这个问题是指你引用(调用)了非静态函数,但你不是通过类对象来调用的。问题的来源就是sort()函数的第三个谓词参数。为什么会是这样的呢?
-
按照常理来说,同一个类的非静态const成员函数中能相互调用,而不用通过类对象进行访问,为什么这里不行呢?相反如果我们把谓词函数com()定义为static函数问题就没有了。
-
问题的原因其实就是函数参数不匹配的问题。因为我们普通的成员函数都有一个隐含的this指针,表面上看我们的谓词函数com()只有两个参数,但实际上它有三个参数,而我们调用sort()排序函数的时候只需要用到两个参数进行比较,所以就出现了形参与实参不匹配的情况(函数有三个形参,但是只输入了两个实参)。
所以,解决办法就是把谓词函数com()定义为static成员函数。