[Leetcode]错误:error: reference to non-static member function must be called
今天在刷题时,使用了sort函数:sort(首元素地址(必填),尾元素地址(必填),比较函数(选填))
,由于要自定义排序顺序,所以自己写了比较函数cmp,报错如下:
我的错误版本的代码是:在类中定义了cmp函数并使用了其作为sort函数的第三个参数。
整个类:
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<vector<int>> result;
sort(people.begin(),people.end(),cmp);
for(int i=0;i<people.size();i++)
{
if(result.size()<=people[i][1])
result.push_back(people[i]);
else
result.insert(result.begin()+people[i][1],people[i]);
}
return result;
}
bool cmp(vector<int>a,vector<int>b)
{
if(a[0]!=b[0])
return a[0]>b[0];
else
return a[1]<b[1];
}
};
注意 cmp函数定义:
bool cmp(vector<int>a,vector<int>b)
{
if(a[0]!=b[0])
return a[0]>b[0];
else
return a[1]<b[1];
}
错误原因:
- 由于sort的第三个参数为cmp函数,而在类定义中若不将成员函数声明为静态成员函数,c++会默认给成员函数添加一个this指针,而sort函数的第三个参数不允许有指针参数,所以会发生报错。
改正方法:
- 在cmp的定义前加一个static将其定义为静态成员函数(c++静态成员函数无this指针)。
改正后代码:
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<vector<int>> result;
sort(people.begin(),people.end(),cmp);
for(int i=0;i<people.size();i++)
{
if(result.size()<=people[i][1])
result.push_back(people[i]);
else
result.insert(result.begin()+people[i][1],people[i]);
}
return result;
}
static bool cmp(vector<int>a,vector<int>b)
{
if(a[0]!=b[0])
return a[0]>b[0];
else
return a[1]<b[1];
}
};
成功!