C++ 报错-reference to non-static member function must be called

今天刷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& 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 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即可。

你可能感兴趣的:(C++)