Probleme relative a C++

Fermé
jwihida Messages postés 4 Date d'inscription mardi 4 janvier 2011 Statut Membre Dernière intervention 9 janvier 2011 - 4 janv. 2011 à 02:12
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 janv. 2011 à 09:56
Bonjour tout le monde,

S'il vous plais j'ai créée une classe personne ayant comme constructeurs

personne::personne(char* n,char* p,int a)
{
nom = new char[strlen(n)+1];
strcpy(nom,n);
prenom = new char[strlen(p)+1];
strcpy(prenom,p);
age = a;
}
personne::personne(personne & p)
{
nom = new char[strlen(p.nom)+1];
strcpy(nom,p.nom);
prenom = new char[strlen(p.prenom)+1];
strcpy(prenom,p.prenom);
age = p.age;
}
sachant que j'ai défini des valeurs par défaut pour le constructeur.
Qaunt je crée un tableau de personne de maniére statique tout va bien mais le probleme s'impose dans la classa main quant j'essaye de créer le tableau dynamiquement comme cela :

int nombre_pers;
char* n;
char* p;
int a ;

personne* tab_pers ;
cout<<"Entrez le nombre de personnes à stocker : ";
cin>>nombre_pers;
tab_pers = new personne[nombre_pers];
for(unsigned int i=0;i<3;i++)
{
cout<<"-----------------------------"<<endl;
tab_pers[i] = new personne();
cout<<"NOM :";
cin>>n;
cout<<"PRENOM :";
cin>>p;
cout<<"AGE :" ;
cin>>a;
tab_pers[i]->setNom(n);
tab_pers[i]->setPrenom(p);
tab_pers[i]->setAge(a);

}
il ne marche pas ,génère des erreurs de compilation :

no match for 'operator=' in '*((+(i * 12u)) + tab_pers) = (((personne*)operator new(12u)), (<anonymous>->personne::personne(((char*)((const char*)"")), ((char*)((const char*)"")), 0), <anonymous>))'

no match for 'operator=' in '*((+(i * 12u)) + tab_pers) = (((personne*)operator new(12u)), (<anonymous>->personne::personne(((char*)((const char*)"")), ((char*)((const char*)"")), 0), <anonymous>))'

no match for 'operator=' in '*((+(i * 12u)) + tab_pers) = (((personne*)operator new(12u)), (<anonymous>->personne::personne(((char*)((const char*)"")), ((char*)((const char*)"")), 0), <anonymous>))'

......

s'il vous plait j'ai besoin de votre aide ):

Merci d'avance.


1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 janv. 2011 à 08:12
tab_pers[i] = new personne(); 

cette ligne n'a pas de sens, tab_pers[i] n'est pas un pointeur, tu confond avec le java je pense.
0
jwihida Messages postés 4 Date d'inscription mardi 4 janvier 2011 Statut Membre Dernière intervention 9 janvier 2011
4 janv. 2011 à 08:30
Bonjour ,

tout D'abord je vous remercie de prendre de votre temps pour me répondre.
Et bon oui vous avez raison mais le problème même si je l'élimine et je procède comme suit :

for(unsigned int i=0;i<3;i++)
{
cout<<"-----------------------------"<<endl;
// tab_pers[i] = new personne();
cout<<"NOM :";
cin>>n;
cout<<"PRENOM :";
cin>>p;
cout<<"AGE :" ;
cin>>a;
tab_pers[i].setNom(n);
tab_pers[i].setPrenom(p);
tab_pers[i].setAge(a);

}
for(unsigned int i=0;i<3;i++)
{
cout<<"********************************"<<endl;
tab_pers[i].Afficher();
}

je rencontre un grand debogage lors de l'execution une fois j'entre le premier nom et je tappe sur ENTER :==> une boite de dialogue indiquant le debog apparait .
Je sais que c'est un probléme de pionteur mais j'arrive pas à le localiser .
M
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 janv. 2011 à 08:42
ba oui, forcément, il faut dimensionner "n".
Un conseil, comme tu fais du C++, laisse tomber les char* et utilise la classe standard "string". Cette classe gère les chaines de caractères, ce qui fait qu'il n'y a plus besoin de s'occuper de l'allocation mémoire.
interet : code plus compact, plus lisible, plus robuste
inconvénient : presque trop facile ;-)
0
jwihida Messages postés 4 Date d'inscription mardi 4 janvier 2011 Statut Membre Dernière intervention 9 janvier 2011
4 janv. 2011 à 08:57
Ah oui j'ai oublier ce truc là vous m'avez bien aidé je vous remercie infiniment ;-) et pour les c'est le prof qui nous a obligé de les utiliser.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 janv. 2011 à 09:56
je ne comprendrais jamais ces con de prof qui font faire du C++ en utilisant cout mais sans string !
0