2014-08-27 1 views
0

En gros, voici ce que mon code ressemble à:"auto" devenir le mauvais type?

vector<int> myVec; // defined elsewhere, and has stuff in it. 
auto it = lower_bound(myVec.front(), myVec.back(), key); 
myVec.insert(it, key); // <- compiler error! 

L'erreur du compilateur est error: no matching function for call to 'std::vector<int>::insert(int&, int&)', ce qui est inattendu, car il est censé être un « something_something_iterator ».

Pourquoi est-ce que c'est ça?

Je compile avec MinGW-W64 sur Windows 7.

+0

Quelle a été l'erreur complète du compilateur? Pourquoi penses-tu que le compilateur pense que c'est un 'int &'? –

+3

'std :: vector :: front/back' renvoie une référence ou const_reference .. vous voulez probablement utiliser' std :: vector :: begin/end' – KoKuToru

+1

Votre compilateur est configuré pour utiliser le mode C++ 11 ('- std = C++ 11', je suppose, sur la ligne de commande)? Sinon, il pourrait interpréter 'auto' comme le spécificateur de classe de stockage, en ajoutant le' int' implicite. –

Répondre

13

il devrait être

auto it = std::lower_bound(myVec.begin(), myVec.end(), key); 
+0

J'ai complètement raté la partie 'begin' /' end' à la fois dans la question et dans la réponse:/ –

+0

Ca l'a fait, merci! –