Bonjour à vous, je dois pour un projet, coder une liste orienté objet en C++. Seulement je suis coincé à un petit problème lorsque je retire dans ma liste. Le but de ma procédure est de pouvoir retirer une cellule à n'importe quel emplacement dans ma liste avec un nombre envoyé en paramètre : _uiPosition. Bon, je suis capable de retirer le premier élément de ma liste, le dernier élément et parfois d'autre qui se trouve n'importe où. J'ai un problème lorsque j'essaie de retirer une cellule autre qu'au premier et au dernier. J'arrive à en retirer quelques-uns, mais lorsque je les retire, que j'en ajoute des nouveaux avec ma procédure ajouter et que je les retire à nouveau. Mon programme peut ne pas fonctionner parfois, un message d'erreur me dit : violation d'accès.

Voici ma procédure pour retirer

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
30
31
32
33
bool Retirer(unsigned int _uiPosition){ //permet de retirer dans la liste
            if (_uiPosition >= 1 && _uiPosition <= m_uiCount){ //si la position envoyer en paramètre respecte un nombre dans la liste
                    if (m_pPremier->ObtenirSuivant() != nullptr){
                            if (_uiPosition == 1){ //si on veux retirer le première élément de ma liste
                                    m_pPremier = m_pPremier->ObtenirSuivant(); //changer la position de de mon première élément au suivant
                            }
                            else{ //si on a besoin de parcourir ma liste pour trouver l'élément
                                    CCelluleListe<modele>* tempAvantSupprimer = m_pPremier; //créer un temporaire
                                    for (int iCompteur = 1; iCompteur < _uiPosition - 1; iCompteur++){ //trouver l'emplacement précédent de celui que l'on veut suprimer
                                            tempAvantSupprimer = tempAvantSupprimer->ObtenirSuivant(); //changer le pointeur temporaire tant que la position n'est pas la bonne recherché
                                    }
 
                                    if (_uiPosition == m_uiCount){ //si mon élément est le dernier
                                            tempAvantSupprimer->DefinirSuivant(nullptr);
                                    }
 
                                    else{
                                            CCelluleListe<modele>* TempSupprimer = tempAvantSupprimer->ObtenirSuivant(); //créer un nouveau pointeur qui pointe à celui que l'on veut supprimer
                                            tempAvantSupprimer->DefinirSuivant(tempAvantSupprimer->ObtenirSuivant()); //Définir le suivant de l'élément qui précede celui à supprimer au suivant de celui à supprimer
                                            delete TempSupprimer; //supprimer mon pointeur temporaire à supprimer
                                    }
                            }
                    }
                    else{
                            delete m_pDernier;
                            m_pDernier = nullptr;
                    }
                    m_uiCount--; //décrémenter mon nombre d'élément dans ma liste en réponse à un retirement
            }
            else{
                    return false; //si ma liste était vide, alors on ne peut rien retirer
            }
    }
Voici ma procédure pour ajouter

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void Ajouter(modele _Element){
		if (m_pDernier == nullptr){ // code à executer si ma liste est vide
			m_pDernier = new CCelluleListe<modele>(_Element, nullptr); //créer une nouvelle cellule à la position m_pDernier
			m_pPremier = m_pDernier; //mettre la même position à m_pPremier puisque la liste contient seulement cette élément
		}
		else{
			m_pDernier->DefinirSuivant(new CCelluleListe<modele>(_Element, nullptr)); //créer une nouvelle cellule et faire pointer Dernier sur celui-ci
			m_pDernier = m_pDernier->ObtenirSuivant();
		}
		++m_uiCount; //incrémenter mon compteur d'élément dans ma liste
	}