今天在调试在将sort函数作为类的成员函数使用时,sort函数的第三个参数,即compare函数,老是报错,我经过了很多很多次的修改,终于找到了原因,发现在类内使用sort函数时,其第三个参数即compare函数需要声明称static,否则的话就会出现错误,错误信息的log我也看不懂。改过来之后,再一编译,链接错误,
>错误信息如下:
undefined reference to `WinMain@16'|
>解决办法:
上网一看,说是没有main函数,卧槽,我的怎么可能没有main函数!但是我还是去查看了一下,发现还真是在调试的时候, 不小心把main函数也给注释了....
参考:
https://blog.csdn.net/chuck_0430/article/details/8824762
什么?你还想看sort函数的报错信息?呐,是这样的:
D:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\predefined_ops.h|123|error: must use '.*' or '->*' to call pointer-to-member function in '((__gnu_cxx::__ops::_Iter_comp_iter<bool (Solution::*)(std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>)>*)this)->__gnu_cxx::__ops::_Iter_comp_iter<bool (Solution::*)(std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>)>::_M_comp (...)', e.g. '(... ->* ((__gnu_cxx::__ops::_Iter_comp_iter<bool (Solution::*)(std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>)>*)this)->__gnu_cxx::__ops::_Iter_|
出现如上的错误的信息之后,我在网上查了查,从sort/qsort对字符串排序这篇博客中找到了对应的sort函数的使用,和我的程序的区别就是,我的是类的成员函数,而这篇博客就是一个小程序,没有类的封装,一开始我还没意识到,但是我将自己的 代码改成了博客中几乎一样了,但是就是死活通不过,我就开始怀疑是类封装过程中的问题了,果然在請問,如何依照class成員變數做排序(運用sort()函數)这篇博客中看到,如果是作为类的成员函数,需要将compare函数写成static才可以。
最终正确的程序代码如下,你猜猜是实现什么功能?
class Solution { public: string PrintMinNumber(vector<int> numbers) { string ret; if(numbers.empty()) return ret; vector<string> p; for(int i = 0; i < numbers.size(); i++){ p.push_back(to_string(numbers[i])); } sort(p.begin(), p.end(), cmp); for(int i = 0; i < numbers.size(); i++){ ret += p[i]; } return ret; } static bool cmp(string a, string b){ string aa = a + b; string bb = b + a; return aa < bb; } };
实现的功能是:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。