Tableau dans une fonction

meksoft002 Messages postés 7 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 20 octobre 2009 - 13 janv. 2009 à 19:23
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Derniè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?
}
}

//*dans le main
Personne *p;
creer(&p,3);

5 réponses

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
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
              }
       }
}

dans le main
Personne *p
creer(p,5);
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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.

Cordialement, uaip.
0
meksoft002 Messages postés 7 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 20 octobre 2009
14 janv. 2009 à 20:21
pour gamemonde..... alors fauderait-il mettre une fonction membre (ou amie) appellée setpersonne  selon toi?

pour uaip... :p je n'ai pas fais attention merci pour la remarque....
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
15 janv. 2009 à 03:49
oui désoler j'avais oublier pers->SetPersonne(....)
étant membre de la classe erreur de programmation a la main
mais tu as bien résumé tout l'ensemble
0
Rejoignez-nous