Pointeur et objet ET collection d'objet

MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002 - 8 nov. 2002 à 23:35
mohzaiani Messages postés 1 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 22 novembre 2008 - 22 nov. 2008 à 13:01
En fait je savais pas trop quoi mettre comme titre pour pas copier :p

Bon je vous explique mon probleme (j'ai pas le source de ce probleme sous la main mais j'ai le probleme en tete alors regarde pas les fautes de codages a cote)

J'ai une classe que l'on va appeler maClasse qui possede trois invariants, un int, un char* et un objet d'une troisieme classe (maClasse3)

J'ai une autre classe que l'on va appeler maClasse2 qui est un tableau d'objet de type maClasse. Vous me suivez ?

Dans ma classe de test j'ai fait un truc comme ca :

....

char command;
maClasse *maClasse2 = new maClasse();
maClasse *maClasse;

while (command != 'q')
{
....

switch case 'a': (pour ajouter un element)
{

char unChar[30] //le probleme vient de la
int unInt;
cin >> unChar;
...
cin >> unInt;
maClasse=new maClasse(unChar, unInt);
maClasse2->add(*maClasse);
break;
}

switch case 'v':
{
maClasse2->view(); //donc pour afficher;
break;
}
}

Donc si je rajoute un objet de type maClassw, tout se passe normalement (via l'affichage)
Et si je rajoute ensuite un objet (dans la boucle while) il me rajoute effectivement le deuxieme objet, seulement je me rend compte que le char* invariant de l'objet repointe sur la meme chaine.
Donc en fait je me retrouve avec pour les deux objets du tableau avec un char possedant la meme adresse je suppose. Donc faudrait faire une copie du char* je suppose. Comment ?

Donc c un probleme de pointeur. Si quelqu'un a eu le courage d'essayer de comprendre et peut m'aider ... merci.

2 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 nov. 2002 à 12:00
Dans ta classe maClasse, modifie tes constructeur et destructeur pour avoir ca:

maClasse::maClasse(const char* unChar, int unInt)
{
m_unChar=new char [strlen(unChar) + 1];
strcpy(m_unChar, unChar, strlen(unChar));
m_unInt=unInt;
}

maClasse::~maClasse()
{
delete [] m_unChar;
}
0
mohzaiani Messages postés 1 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 22 novembre 2008
22 nov. 2008 à 13:01
comment je fait la programation sur opengl , merci
0
Rejoignez-nous