J'ai du mal à compiler quelque chose. Je ne comprends pas l'erreur rejetée par le compilateur. Un code pour illustrer le problème est ci-dessous.L'insertion avec un objet en tant que clé ne peut pas être compilée?
#include <map>
using namespace std;
class Thing
{
public:
Thing(int n):val(n) {}
bool operator < (const Thing& rhs) const
{
return val < rhs.val;
}
int getVal() { return val; }
private:
int val;
};
int main(int argc, char* argv[])
{
std::map<Thing, int> mymap;
Thing t1(1);
Thing t2(10);
Thing t3(5);
mymap[t1] = 1; // OK
mymap.insert(t1); // Compile error
}
Maintenant, le message d'erreur du compilateur:
test.cpp: In function ‘int main(int, char**)’: test.cpp:34: error: no matching function for call to ‘std::map, std::allocator > >::insert(Thing&)’ /usr/include/c++/4.4/bits/stl_map.h:499: note: candidates are: std::pair, std::_Select1st >, _Compare, typename _Alloc::rebind >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::insert(const std::pair&) [with _Key = Thing, _Tp = int, _Compare = std::less, _Alloc = std::allocator >] /usr/include/c++/4.4/bits/stl_map.h:539: note: typename std::_Rb_tree<_Key, std::pair, std::_Select1st >, _Compare, typename _Alloc::rebind >::other>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::insert(typename std::_Rb_tree<_Key, std::pair, std::_Select1st >, _Compare, typename _Alloc::rebind >::other>::iterator, const std::pair&) [with _Key = Thing, _Tp = int, _Compare = std::less, _Alloc = std::allocator >]
Qu'est-ce que cela signifie? Y a-t-il une autre méthode ou un autre opérateur que j'ai besoin de définir dans Thing pour le compiler?
La méthode 'getVal()' peut également être qualifiée '' const''. – Arun
@ArunSaha - merci, c'est juste un exemple cependant. – Matt