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.
Veuillez montrer la ligne que vous avez appelée 'std :: sort()'. – timrau
'taille
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());' –