今天刷leetcode上435题的时候遇到了这个错误:
solution.cpp: In member function eraseOverlapIntervals Line 19: Char 51: error: invalid use of non-static member function 'bool Solution::cmp(const Interval&, const Interval&)' sort(intervals.begin(),intervals.end(),cmp);
代码如下:
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
bool cmp(const Interval &a,const Interval &b){
return a.end < b.end;
}
int eraseOverlapIntervals(vector<Interval>& intervals) {
int len = intervals.size();
if(len == 0 || len == 1)
return 0;
sort(intervals.begin(),intervals.end(),cmp);
int count = 1;
int end = intervals[0].end;
for(int i = 1;i<len;++i){
if(end > intervals[i].start)
continue;
end = intervals[i].end;
++count;
}
return len-count;
}
};
之前写cmp函数的时候都是写到类外面,这次写到类里面发现不行。。仔细想想发现了这个严重的问题,所以专门写一篇来记录一下。
对于像bool cmp(const Interval &a,const Interval &b)这样的成员函数,它是属于类的,所以调用它必须需要对象才可以,这是因为bool cmp这样的函数完整的标签是:
bool cmp( Solution* this, const Interval &a,const Interval &b );
也就是它有一个implicit parameter(隐含参数),这才导致它无法被sort()这样的函数调用,主要是参数不匹配。当然,把这个函数改成static即可。