[c++]erreur lors de la suppression
Fermé
jaki1910
Messages postés
3
Date d'inscription
vendredi 27 août 2010
Statut
Membre
Dernière intervention
28 août 2010
-
Modifié par jaki1910 le 28/08/2010 à 01:46
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 28 août 2010 à 16:37
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 28 août 2010 à 16:37
A voir également:
- [c++]erreur lors de la suppression
- Forcer la suppression d'un fichier - Guide
- Suppression compte instagram - Guide
- Erreur 1004 vba ✓ - Forum VB / VBA
- Erreur 1000 france tv - Forum MacOS
- Suppression compte facebook - Guide
3 réponses
Pacorabanix
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
658
Modifié par Pacorabanix le 28/08/2010 à 09:52
Modifié par Pacorabanix le 28/08/2010 à 09:52
tu dis que tu as une erreur, mais tu ne dis pas laquelle... y'a t-il un message d'erreur à la compilation ? à l'exécution ? un comportement étrange ? Dans ce dernier cas, quel comportement ?
jaki1910
Messages postés
3
Date d'inscription
vendredi 27 août 2010
Statut
Membre
Dernière intervention
28 août 2010
28 août 2010 à 13:15
28 août 2010 à 13:15
Merci pour votre réponse, j'ai l'erreur suivant:
Debug Assertion Failed
...
Expression:List iterator not incrementable.
si je désactive la ligne de liste.erase(it) le programme fonction bien mais je n'arrive pas à supprimer de la liste.
Merci.
Debug Assertion Failed
...
Expression:List iterator not incrementable.
si je désactive la ligne de liste.erase(it) le programme fonction bien mais je n'arrive pas à supprimer de la liste.
Merci.
Pacorabanix
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
658
Modifié par Pacorabanix le 28/08/2010 à 16:39
Modifié par Pacorabanix le 28/08/2010 à 16:39
le problème c'est qu'une fois que tu supprimes "it" avec erase(it), it devient un itérateur non valide (puisqu'il ne pointe plus sur aucun élément de la liste).
Donc ensuite lorsque la deuxième passe de la boucle essaye de faire "it++" ça donne l'erreur que tu vois.
la fonction erase() renvoie l'itérateur sur l'élément suivant. Tu devrais essayer de remplacer ton code :
par ceci :
j'espère ne pas avoir écrit trop de bêtises...
Donc ensuite lorsque la deuxième passe de la boucle essaye de faire "it++" ça donne l'erreur que tu vois.
la fonction erase() renvoie l'itérateur sur l'élément suivant. Tu devrais essayer de remplacer ton code :
for(list<Etudiant>::iterator it=liste.begin();it!=liste.end();it++){
if((it->getsexe()=='f')||(it->getsexe()=='F')){
tab[j].setNom(it->getNom());
liste.erase(it);
j++;
}
}
par ceci :
list<Etudiant>::iterator it=liste.begin();
while(it!=liste.end()){
if((it->getsexe()=='f')||(it->getsexe()=='F')){
tab[j].setNom(it->getNom());
//on supprime l'itérateur et on récupère d'un coup l'élément suivant
it=liste.erase(it);
j++;
}
else {
//si on n'a rien effacé il faut avancer dans la liste
++it;
}
}
j'espère ne pas avoir écrit trop de bêtises...