iterateur sur une liste en cours de lecture passée en paramètre
Bonjour,
Je dois faire une procédure qui traite une liste connue en paramètre qui est déjà ouverte
l'appel comprend les éléments suivants:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
CAnalysedWord* pWord
std::list<CAnalysedWord*>::itWord;
...
pWord = *itWord;
...
...
AnalyseCurrentList( CAnalysedWord* pWord....)
{
std::list<CAnalysedWord*>::itWord;
itWord = &pWord; |
mais cette syntaxe qui est le symétrique de l'affectation est refusée par le compilateur.
Comment initialiser dans la procédure un itérateur avec ce qui est pointé par le pointeur pWord?
Je serai content d'avoir cette solution. Celui qui me répondra sera :ccool:
précisions et autres contributions sur le sujet
J'ai précisé les choses pour conformité avec la compilation. mais ça ne fait pas avancer le schmilblick
une autre contribution m'a proposé
itWord = *pWord;
mon compilateur m'a demandé de caster, ce qui donne
itWord = (std::list<CAnalysedWord>::iterator) *pWord;
et là le compilateur me dit transtypage impossible entre iterateur et classe
Effectivement les pointeurs et les itérateurs ne sont pas compatibles
Bonjour
Je confirme ton point de vue: il n'est pas possible d'attribuer un pointeur à un itérateur, et donc on arrive à une solution bestiale
Code:
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 37 38 39 40 41 42 43 44 45 46 47 48
|
itTemp = itWord;
if( p2NextWord != NULL && p3NextWord != NULL && p4NextWord != NULL & p5NextWord != NULL)
{ //7
if( p2NextWord->POS != NULL || p3NextWord->POS != NULL || p4NextWord->POS != NULL || p5NextWord->POS == NULL)
{
if( p2NextWord->POS != POS_STOPMARK)
if( p3NextWord->POS != POS_STOPMARK)
if( p4NextWord->POS != POS_STOPMARK)
if( p5NextWord->POS != POS_STOPMARK)
if( p2NextWord->POS == POS_PREP || p3NextWord->POS == POS_PREP || p4NextWord->POS == POS_PREP || p5NextWord->POS == POS_PREP)
{ //8
// il faut savoir quel est le pointeur qui à rendu le test possible
// il faut développer une procédure qui analyse une list
// de mots tant que le type de syntagme ne change pas
if( p2NextWord->POS == POS_PREP)
{ //8
itTemp++;
itTemp++;
}
else if ( p3NextWord->POS == POS_PREP)
{
itTemp++;
itTemp++;
itTemp++;
}
else if ( p4NextWord->POS == POS_PREP)
{
itTemp++;
itTemp++;
itTemp++;
itTemp++;
} //8
else if( p5NextWord->POS == POS_PREP)
{
itTemp++;
itTemp++;
itTemp++;
itTemp++;
itTemp++;
}
// le pointeur le pointeur la position
// courrant sur le receptacle
// actif de départ
AnalyseCurrentVerbSyntagne( itTemp, pCurrentChunk , Step, DrivingPos, bMarkOngoing, bPivotPending);
}
} //8
} //7 |
avec toutes les dispositions de blindage pour éviter de pointer dans la fin de liste