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