leetcode179题中编译出现则个问题
出错的代码:
class Solution {
public:
bool cmp1(const int& a, const int& b){
string s1=to_string(a);
string s2=to_string(b);
string ans1=s1.append(s2);
string ans2=s2.append(s1);
return ans1>ans2;
}
string largestNumber(vector<int>& nums) {
sort(nums.begin(),nums.end(),cmp1);
string ans="";
int len1=nums.size();
if(nums[0]==0){
return "0";
}
for(int i=0;i<len1;++i){
ans.append(to_string(nums[i]));
}
return ans;
}
};
我本来想自定义compare函数传入sort中,但却报错。
error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1);
原因是我把cmp1函数写在类里面,普通的成员函数都有一个隐含的this指针,表面上看cmp1只有两个参数,但实际上它有三个参数,而调用sort()排序函数的时候只需要用到两个参数进行比较,所以就出现了形参与实参不匹配的情况(函数有三个形参,但是只输入了两个实参)。
解决方法:
把cmp1移出类外