首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

重载小于号后用sort函数提示类型异常

2012-06-25 
重载小于号后用sort函数提示类型错误C/C++ code#include iostream#include vector#includealgorithm

重载小于号后用sort函数提示类型错误

C/C++ code
#include <iostream>#include <vector>#include<algorithm>#include<iterator>#include<utility>#include<limits>using namespace std;using namespace std::rel_ops;class pro;typedef vector<pro>::iterator proit;vector<pro> a;int max_times(numeric_limits<int>::min());void next(proit begin,int cont=0);class pro{public:    int begin;    int end;    bool operator==(const pro& b)const    {        if(this->begin == b.begin)        {            return this->end == b.end;        }        return false;    }    bool operator<(const pro& b) const    {        if(begin == b.begin)        {            return end < b.end;        }        return begin < b.begin;    }    friend istream& operator>>(istream& i,pro& a);};istream& operator>>(istream& i,pro& a){    i>>a.begin>>a.end;    return i;}class able{public:    able(pro& com)    {        this->pre = com;    }    bool operator()(pro& next)    {        return next.begin >= this->pre.end;    }private:    pro pre;};void next(proit begin,int cont){    if(begin == a.end() )    {        if(cont<=max_times)        {            return;        }        max_times = cont;        return;    }    proit pos(begin);    while( pos != a.end() )    {        pos = find_if(pos,a.end(),able(*pos));        next(pos,cont+1);    }}int main(){    int i;    proit pos;    pro temp;    while(cin>>i,i)    {        max_times = numeric_limits<int>::min();        a.clear();        while(i--)        {            cin>>temp;            a.push_back(temp);        }        sort(a.begin(),a.end());        for(pos=a.begin();pos!=a.end();pos++)        {            next(pos,1);        }        cout<<max_times<<endl;    }    return 0;}


编译错误
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h: In function `const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&) [with _Tp = pro]':
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:2484: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<pro*, std::vector<pro, std::allocator<pro> > >, _Size = int]'
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:2555: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<pro*, std::vector<pro, std::allocator<pro> > >]'
..\src\2037(complete).cpp:96: instantiated from here
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:90: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:91: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:93: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:97: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:99: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers



怎么回事,我用的mingw,用vs编译就没问题。

------解决方案--------------------


你得看看stl::algorithm中sort的用法:
http://www.cplusplus.com/reference/algorithm/sort/

针对楼主这个例子,建议将比较函数作为类pro的友元函数。
[解决办法]
编译器有毛病, GCC同样无障碍.

热点排行