2012-07-26 3 views
0

J'ai une question (et désolé pour mon mauvais anglais.)VS à CBlocks, std :: sort, opérateur <erreur du compilateur

J'ai développé un programme C++ dans VS 2008 Express C++, et je veux migrer à des blocs de code. La migration a réussi, mais le compilateur GNU par défaut trouve une erreur dans la compilation.

Cependant, les VS n'ont rien trouvé. J'utilise std::sort algorithme à un std::vector, contient des instances de classes. Et je lui fais un bool operator<()const.

class Item{ 
     //... 
     double size; 

    public: 
     bool operator<(Item& theOther)const{ 
      return size < theOther.size ? true : false; 
     } 
     //... 
    } 

Maintenant, le compilateur me dire que:

c:\mingw\bin\..\lib\gcc\mingw32\4.5.2\include\c++\bits\stl_algo.h||In function '_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, const _Tp&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Item*, std::vector<Item> >, _Tp = Item]':| 

c:\mingw\bin\..\lib\gcc\mingw32\4.5.2\include\c++\bits\stl_algo.h:2249|70|instantiated from '_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Item*, std::vector<Item> >]'| 

c:\mingw\bin\..\lib\gcc\mingw32\4.5.2\include\c++\bits\stl_algo.h:2280|54|instantiated from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Item*, std::vector<Item> >, _Size = int]'| 

c:\mingw\bin\..\lib\gcc\mingw32\4.5.2\include\c++\bits\stl_algo.h:5212|4|instantiated from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<Item*, std::vector<Item> >]'| 

D:\the_user\packing\packing\PackingProblem.h:426|41|instantiated from here| 
c:\mingw\bin\..\lib\gcc\mingw32\4.5.2\include\c++\bits\stl_algo.h|2208|error: no match for 'operator<' in '__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Item*, _Container = std::vector<Item>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = Item&]() < __pivot'| 

D:\the_user\packing\packing\Item.h|15|note: candidate is: bool Item::operator<(Item&) const| 
||=== Build finished: 2 errors, 0 warnings ===| 

Tout le monde a une idée comment puis-je résoudre?

Merci pour toute réponse.

+0

Veuillez montrer la ligne que vous avez appelée 'std :: sort()'. – timrau

+0

'taille

+0

Je voudrais aussi faire l'argument de 'opérateur <' const, c'est-à-dire 'operator <(const Item & theOther)'. Appelez-vous 'sort' comme ça? 'std :: sort (vec.begin(), vec.end());' –

Répondre

0

changement

bool operator<(Item& theOther)const 

dans

bool operator<(const Item& theOther)const 

devrait fonctionner.

+0

Merci. Ça fonctionne bien. Mais comment le VS peut-il l'utiliser sans const? – deeagle

Questions connexes