meksoft002
Messages postés7Date d'inscriptionsamedi 27 octobre 2007StatutMembreDernière intervention20 octobre 2009
-
13 janv. 2009 à 19:23
gamemonde
Messages postés336Date d'inscriptionsamedi 9 août 2003StatutMembreDernière intervention 9 juillet 2011
-
15 janv. 2009 à 03:49
salut, je vouderais mettre la dimension d'un tableau a partir d'une fonction mais..l'éxecution ne se termine pas quand je la lance
void creer(Personne** pers,int nbrelem){
char* nom ; char* prenom ; unsigned int age;
*pers=new Personne[nbrelem];
for(int i=0;i<nbrelem;i++){
cout<<"donnez le nom , le prenom et l'age de "<>nom;
fflush(stdin);
cin>>prenom;
fflush(stdin);
cin>>age;
*((*pers)+i)=Personne(nom,prenom,age); // ici le probleme...pk?
}
}
gamemonde
Messages postés336Date d'inscriptionsamedi 9 août 2003StatutMembreDernière intervention 9 juillet 20112 14 janv. 2009 à 00:38
La tu fais un tableau en deux dimension X,Y
si je me fis a ce que tu veux faire
c'est :
void creer(Personne *pers,int iNbElement)
{
if (iNbElment > 0)
{
pers = new Personne[iNbElement];
if (pers)
{
....
pers[i] = SetPersonne(nom,prenom,age); // car ton object est deja construit tu ne peux pas appelé un autre constructeur
}
}
}
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 14 janv. 2009 à 10:52
pers est un "pointeur de pointeur", donc *pers retourne l'adresse de la variable pointée par le pointeur lui même pointé, non ?
Sinon il y a du C++ dans ton code, or on est dans la rubrique C, ici.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 14 janv. 2009 à 23:26
Salut,
Tu parles de fonction amie, donc je suppose que Personne est une classe. (ton code étant donc bel et bien en C++).
Comme tu n'as donné ni le code de la classe ni celui des méthodes, j'ai essayé de recoder vite fait un truc similaire. Voilà ce que j'obtiens :
#include
using namespace std;
class Personne {
public:
Personne();
Personne(char* nom,char* prenom,int age);
int Age;
char Nom[25], Prenom[25];
};
Personne::Personne() {
strcpy(this->Nom,"");
strcpy(this->Prenom,"");
this->Age= 0;
}
Personne::Personne(char* nom,char* prenom,int age) {
strcpy(this->Nom,nom);
strcpy(this->Prenom,prenom);
this->Age=age;
}
void SetPersonne(Personne p,char* nom,char* prenom,int age) {
strcpy(p.Nom,nom);
strcpy(p.Prenom,prenom);
p.Age=age;
}
void creer(Personne *pers,int iNbElement) {
if (iNbElement > 0){
char nom[25];
char prenom[25];
unsigned int age;
pers=new Personne[iNbElement];
if (pers) {
fflush(stdin);
for(int i=0;i < iNbElement;i++) {
cout << "Nom :" << endl;
cin >> nom;
cout << "Prenom :" << endl;
cin>>prenom;
cout << "Age :" << endl;
cin >> age;
SetPersonne(pers[i],nom,prenom,age);
}
}
}
}
int main() {
Personne *p;
creer(p,3);
return 0;
}
Ca compile et ça ne plante pas, mais me connaissant, je ne sais pas si ça ne plantera pas au moment de récupérer les données ^^.
Bref, d'une part (je ne suis pas sûr) on m'avait dit de ne jamais mettre de pointeur dans un cin.
Ensuite pour ce qui est de la fonction amie, t'as 3 cas de figure. Mais déjà, une petite remarque :
"pers[i] = SetPersonne(nom,prenom,age); // car ton object est deja construit tu ne peux pas appelé un autre constructeur"
Certes l'objet est déjà créé donc impossible d'appeler à nouveau le constructeur, mais je ne vois pas comment on peut renvoyer l'age, le nom et le prénom avec 1 seule valeur de retour (sauf si tu joues avec les valeurs multiples, mais j'en doute...)
Donc pour les 3 cas de figure :
- soit effectivement tu déclares la fonction SetPersonne(); amie (si tes attributs sont privés).
- soit, comme moi, tu mets tes attributs publics et SetPersonne(); peut alors être une fonction indépendante.
- soit tu déclares tout bêtement SetPersonne(); comme membre de ta classe.
(ce qui est en vert est ma réponse à ta question, tout le reste ne sont que des tests et autres, mais je doute que le code marche à 100% si on l'étend).
Cordialement, uaip.
Vous n’avez pas trouvé la réponse que vous recherchez ?