Bonjour à tous,
J'ai le sentiment que ma question est sans doute idiote, mais impossible de trouver la solution !
Alors, je me permet de me tourner ves vous...
J'ai des objets de type T dont je veux faire une liste ordonnée.
J'ai donc défini une relation d'ordre qui porte sur le champ ref_ de T.
Voici une partie de ma classe :
Le problème se pose à l'écriture de la méthode DesT::Ajoute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class DesT { public : ... void Ajoute (const T & c); ... private : typedef std::set<T, OrdreT> TypeListe; typedef TypeListe::const_iterator It; typedef TypeListe::iterator Wit; TypeListe liste_; };
Je veux trouver s'il y a dans ma liste un objet ayant la même ref_ que l'objet à insérer, et si c'est le cas, je veux surcharger cet objet.
Voilà ce que j'ai écrit :
J'ai l'erreur suivante à la ligne marquée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void DesT::Ajoute (const T & c) { std::pair<DesT::Wit, bool> p = liste_.insert (c); if (p.second == false) { // déjà un obj ayant cette ref_ DesT::Wit it = p.first; T & cref = *it; // <<== Erreur de compilation cref += c; } }
D'habitude, j'utilise toujours les containeurs de la STL avec des pointeurs,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 In member function `void DesT::Ajoute(const T&)': error: could not convert `(&it)->std::_Rb_tree_iterator<_Val, _Ref, _Ptr>::operator*() const [with _Val = T, _Ref = const T&, _Ptr = const T*]()' to `T&'
et je n'ai donc jamais vu ce problème... L'accès (*it) ne rend pas une référence sur un objet?
Merci de m'expliquer ce qu'il se passe...
Est-ce interdit de modifier en place un élément d'un std::set ?
Partager