Bonjour à tous,
JJ'utilise les structures suivantes pour stocker des itérateurs d'un muliset dans un autre multiset. C'est pas très joli mais bon...
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 struct EdgeLine { list <CvPoint> ptList; int oriCount; int blockedOri; int visitedOri[4]; bool isOver; float theta; float length; CvPoint midlePoint; int num; ItMap *myMap; public: EdgeLine(void) { visitedOri[0] = 0; visitedOri[1] = 0; visitedOri[2] = 0; visitedOri[3] = 0; }; }; struct ItMap { multiset <EdgeLine,ComparisonL>::iterator LIt; multiset <EdgeLine,ComparisonT>::iterator TIt; };Ce code compile et fonctionne sous visual studio 9.0 (2008). Par contre en compilant avec gcc, le compilateur me sort l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 multiset <EdgeLine,ComparisonL> globalEdgesL; multiset <EdgeLine,ComparisonT> globalEdgesT; myItL= globalEdgesL.insert(segToMerge); myItT= globalEdgesT.insert(segToMerge); myItL->myMap = new ItMap(); myItL->myMap->TIt =myItT; myItT->myMap = new ItMap(); myItT->myMap->LIt =myItL;
"Assignment of data-member EdgeLine::myMap in read-only structure"
En cheerchant un peu j'ai trouvé quelques infos qui pourraient expliquer ce problème...mais je croyais que les itérateurs set/multiset n'étaient pas invalidés par l'insertion/effacement des objects su set/multiset...est-ce correct?
toute la discussion : http://stackoverflow.com/questions/2...or-in-multisetThe iterators for set and multiset were changed from the standard iterator/const iterator pair to just being const iterators. The reason for this change was that they are ordered containers, and changing the element inside of an iterator can actually invalidate this ordering constraint.
Enfin voilà, du coup, y-a-til un moyen de contourner/résoudre ce problème?
Merci d'avance
Frantz
Partager