A l'aide !! template hastable et iterateurs [Résolu] - C++ - Programmation
Marsh Posté le 02-07-2013 à 19:13:21
Là comme ça, il manque un ; à la ligne 18, ta fonction GetElement est supposée retourner un std::string&, et pas un pointeur, et ne vérifie pas que l'index est bon. D'ailleurs, celui-ci devrait être un size_t, non ? Pas d'index négatif.
Je pense qu'il vaut mieux faire passer mymap par référence constante, et pourquoi tu forces tes templates en pointeur ? tr1::unordered_map<std::string,T> suffirait amplement.
Aussi, vaut mieux utiliser un std::vector au lieu d'une alloc avec new/delete, plus safe.
edit :Ah, grilled
Marsh Posté le 02-07-2013 à 19:57:35
Merci pour ces conseils ... Je les ai appliqués mais ca ne résoud pas le fond du problème ... L'itérateur ne passe pas à la ligne 19 !
Marsh Posté le 03-07-2013 à 00:00:58
c'est typename qui manquait ligne 19
Code :
|
Marsh Posté le 03-07-2013 à 01:20:32
Ce qui m'étonne un peu là, c'est que le ::iterator passe sur une référence constante, c'est pas plutôt const_iterator
Et le typename n'est pas supposé être obligatoire ici
Marsh Posté le 03-07-2013 à 10:35:00
Terminapor a écrit : Ce qui m'étonne un peu là, c'est que le ::iterator passe sur une référence constante, c'est pas plutôt const_iterator Et le typename n'est pas supposé être obligatoire ici |
Je ne sais plus dans quel était le code se trouvait quand je l'ai lu la première fois, mais je me suis fait la même remarque : typename ne devrait pas être obligatoire.
Dans la version que je vois maintenant, où on fait :
Code :
|
Là, effectivement, il est requis de préciser typename pour gcc dans la mesure où, quand gcc parse la déclaration d'itérateur, il ne connait pas T et ne peut donc pas savoir quelle spécialisation éventuellement utiliser, donc le sens de ::iterator n'est pas évident.
Accessoiremnt, tu as tout à fait raison sur le const_iterator.
Marsh Posté le 03-07-2013 à 16:21:01
Merci pour les précisions.
Marsh Posté le 02-07-2013 à 19:00:17
Je vous laisse découvrir le problème dans le code ligne 19 et l'erreur plus bas !
--- Toutes les ameliorations proposées plus bas ont été ajoutées dans ce code
$ g++ test.h
test.h: In constructor ‘ShellSort<T>::ShellSort(const std::tr1::unordered_map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, T*, std::tr1::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, T*> >, false>&, double (T::*)())’:
test.h:21: error: expected `;' before ‘local_it’
test.h:22: error: ‘local_it’ was not declared in this scope
Message édité par nastymushroom2 le 03-07-2013 à 00:01:33