[c++]erreur lors de la suppression
jaki1910
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
comment je peux supprimer sans avoir d'erreurs !!!!!
j'ai écris ce code mais j'ai un erreur lors de la suppression je ne vois pas l'erreur que j'ai commis merci de me répondre.
dans ce code j'essai de transférer les données d'une liste vers un tableau, après transfert, je supprime l'élément transférer.
comment je peux supprimer sans avoir d'erreurs !!!!!
j'ai écris ce code mais j'ai un erreur lors de la suppression je ne vois pas l'erreur que j'ai commis merci de me répondre.
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++; } }
dans ce code j'essai de transférer les données d'une liste vers un tableau, après transfert, je supprime l'élément transférer.
A voir également:
- [c++]erreur lors de la suppression
- Forcer la suppression d'un fichier - Guide
- Suppression compte gmail - Guide
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
3 réponses
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 ?
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.
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...