undefined reference to `WinMain@16'|

今天在调试在将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_|

扫描二维码关注公众号,回复: 1374687 查看本文章

出现如上的错误的信息之后,我在网上查了查,从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。



猜你喜欢

转载自blog.csdn.net/baidu_35679960/article/details/80354613