Probleme relative a C++

jwihida Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je ne comprendrais jamais ces con de prof qui font faire du C++ en utilisant cout mais sans string !
0