最近做题遇到了问题:
class Solution {
public:
bool Compare(string strNum1, string strNum2)
{
string strSum1;
string strSum2;
strSum1 = strNum1 + strNum2;
strSum2 = strNum2 + strNum1;
return strSum1 < strSum2 ? 1 : 0;
}
string PrintMinNumber(vector<int> numbers)
{
vector<string> vStr;
for(vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it)
vStr.push_back(to_string(*it));
sort(vStr.begin(), vStr.end(), Compare);
string str;
for(vector<string>::iterator it = vStr.begin(); it != vStr.end(); ++it)
str += *it;
return str;
}
};
这个代码编译通不过,原因很简单,sort函数的第三个参数需要一个比较函数,这个比较函数必须只有俩个参数,可是类里的方法默认第一个参数是this指针,所以Compare函数实际上有三个参数;只要在把函数定义成静态方法就可以了static bool Compare(string strNum1, string strNum2)
,在方法的返回值前加static关键字即可,静态方法没有this指针做参数,可是需要注意静态方法只能访问类的静态成员,不能访问非静态成员,所以如果这个Compare调用了该类其他非静态方法的话就不行了。