Tableau de pointeurs / décalage

Signaler
Messages postés
8
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
6 janvier 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjour,j'ai crée une classe Voilere. Celle ci contient un tableau de pointeurs sur des objets de type Oiseau. Je dois créer une méthode libere(int rang) qui libere une case du tableau (un Oiseau) et qui décale vers la gauche tous les élément qui étaient à droite de ce rang. voilà ce que j'ai écrit:

void Voliere :: libere(int rang)
{
delete tab[rang];
int i;
for(i=rang+1;i<nbOiseau;i++)
{tab[i-1]=tab[i];
nbOiseau=nbOiseau-1;
}
}

Le probleme : j'ai crée 3 oiseaux dans ma voliere et lorsque je veux liberer la premiere case du tableau (le premier oiseau) via : V.libere(0), ça libere bien ma premiere case mais je retrouve mon deuxieme oiseau deux fois et le troisieme a disparu. Je n'arrive pas à trouver le probleme. J'espere que je suis clair. Merci d'avance pour l'aide.

8 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
void Voliere :: libere(int rang)

{

           delete tab[rang];

           for(int i = rang+1; i<nbOiseau; i++) tab[i-1]=tab[i];
          nbOiseau--;
}

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
6 janvier 2008

Euh... Désolé j'ai pas compris ce que je devais changer...
Peux tu me réexpliquer?
Merci
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
On ne supprime qu'une seule classe Oiseau.
On enlève donc
nbOiseau=nbOiseau-1
de la boucle.

C++ (@++)<!--
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bas tu mets "nbOiseau=nbOiseau-1;" dans ta boucle for, c'est débile. [auteur/SAKINGDOM/617077.aspx SAKingdom]t'a donné la version corrigée.
Messages postés
8
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
6 janvier 2008

Oui ça j'ai compris en fait. Le probleme c'est que lorsque supprime le premier oiseau de la liste, je me retrouve bien avec deux oiseaux (au lieu de trois auparavant). Mais le décalage que je fais ne doit pas être bon puisque au lieu d'avoir mes deux oiseaux restant je me retrouve avec un seul oiseau en double.
Ex: j'ai Oiseau O1, O2, O3.
je supprime 01 (qui disparait bien) mais je me retrouve avec O2 et O2.

(merci luthor j'avais compris!!!!)
Messages postés
8
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
6 janvier 2008

J'ai compris et trouvé merci encore pour l'aide.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Même avec mon code ?
Dans ce cas, ça signifit que nbOiseau ne contient pas le bon nombre de classes.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oups.
Quel était le problème ?

C++ (@++)<!--