|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 672 ![]() |
Bonjour à tous,
je ne sais pas ce que j'ai aujourd'hui, j'y arrive pas ![]() regardez le code suivant: Code :
J'insère des Mere* dans le multiset, tout va bien. Maintenant, je voudrais faire le erase remove de la dernière ligne, qui consiste à supprimer un élément en fonction de sa valeur de y (en supposant que tout les y de toutes les instances de Mere sont différents). Seulement il n'y a pas moyen. Ça fait 3 heures que je suis dessus... En fait, pour être honnête, je l'avais fais sous visual 2008, et ça fonctionnait, sans même un warning. Je le copie dans un projet que je fais avec vs2010, et là ça marche plus, avec une erreur incompréhensible (une histoire de _Next - dans la fonction remove - qui est const alors qu'il n'y a aucune raison qu'il le soit). Je me suis donc créé un projet minimum qui reproduit l'erreur. C'est le code ci-dessus. Je ne vous met pas les messages d'erreur car d'une part ils pointent dans la stl, et bien profond, et d'autre part j'ai essayé 5 millions de trucs et je ne sais pas laquelle de ces tentatives est la plus pertinente. Le mieux c'est que vous essayez de compiler. Là dans l'état il manque au moins une chose: quelque chose qui permet de comparer un Mere* avec un int. Initialement, j'avais ceci (en membre de Mere): Code :
bool operator == ( Mere * other ) { return ( this->y == other->y ); } Comprends pô
|
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : juillet 2008 Messages : 1 580 ![]() |
Tu peux pas faire ça, std::remove marche pas sur les std::set, parce que les objets sont immutables. (et donc les iterateurs aussi).
__________________
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 672 ![]() |
|
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() Inscription : juillet 2008 Messages : 1 580 ![]() |
Citation:
Vu que l'objet est la clef, derrière c'est stocké dans un RB-Tree je te laisse imaginer si on te laisser faire n'importe quoi avec.
__________________
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu |
|
|
|
00
|
|
|
#5 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 675 ![]() |
C'est effectivement VC++2008 qui est trop permissif, et VC++2010 qui a corrigé ça.
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 672 ![]() |
ok merci
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com