Bonjour à tous,
je ne sais pas ce que j'ai aujourd'hui, j'y arrive pas
regardez le code suivant:
j'ai un multiset de Mere*, trié selon la valeur x (membre de la classe Mere).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <set> #include <algorithm> using namespace std; struct Mere { Mere( int x = 0, int y = 0 ) : x(x), y(y) {} int x, y; }; struct MereComp // foncteur qui compare 2 Meres en fonction de x { bool operator () ( Mere * left, Mere * right ) { return ( left->x < right->x ); } }; struct Fille1: public Mere { Fille1( int x = 0, int y = 0 ) : Mere(x,y) {} }; struct Fille2: public Mere { Fille2( int x = 0, int y = 0 ) : Mere(x,y) {} }; int main() { multiset< Mere*, MereComp > s; s.insert( new Fille2( 2, 200 ) ); s.insert( new Fille1( 1, 100 ) ); // erase remove: s.erase( remove( s.begin(), s.end(), 200 ), s.end() ); }
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):
Mais avec vs2010 ça ne marche plus... et le message d'erreur c'est... mon dieu le message d'erreur... si je le poste je vais faire crasher le serveur de developpez.com
Code : Sélectionner tout - Visualiser dans une fenêtre à part bool operator == ( Mere * other ) { return ( this->y == other->y ); }
Comprends pô
Partager