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;
};
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;
Ce code compile et fonctionne sous visual studio 9.0 (2008). Par contre en compilant avec gcc, le compilateur me sort l'erreur suivante:

"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?

The 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.
toute la discussion : http://stackoverflow.com/questions/2...or-in-multiset


Enfin voilà, du coup, y-a-til un moyen de contourner/résoudre ce problème?

Merci d'avance

Frantz