Déclaration d'une Class dans une autre

Résolu
cs_guernine Messages postés 10 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 3 mai 2010 - 11 avril 2010 à 00:24
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 1 mai 2010 à 08:55
salut tous le monde j'ai un problème, je veut déclaré une variable de type Etudiant sachant que Etudiant est une classe voici les deux code.h (Etudiant et Élément ) merci d'avance pour vos réponse.
-------Class Etudiant-----------
class Etudiant
{public:
int *ID;
char *nom;
int *etranger;
float *moyene;
int choix1;
int choix2;
int choix3;
static int compteur;


public:
Etudiant(char*,int,float,int,int,int);
void display();
};

-----------Class Élément-------------
class Element
{
public:
Etudiant valeur; //le compilateur me donne une erreur sur cette ligne
Element *suivant;
public:
void ajouteElement(Etudiant);
// void ajoute_a_la_queue(double);
// void Supprime_Suivant();
void Display();
};

4 réponses

pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
11 avril 2010 à 16:19
En gros :

#include 

using std::cout;
using std::endl;
using std::string;


//A mettre dans un fichier Etudiant.hpp

class Etudiant
{

public:

Etudiant(string,int,float,bool,int,int,int);
void display();
static int getCompteur() {return wCompteur;} //Une méthode statique pour accèder à ton compteur
~Etudiant () {wCompteur--;} //Il faut un destructeur pour actualiser le compteur

private:
//Tous les attributs doivent êtres privés c'est la règle de l'encapsulation

int wID; //Nombre entier et non pointeur sur nombre entier
string wNom; //Impossible de contenir un char seul, je te conseil string
bool wEtranger; //Etranger est à mon avis un booléen
float wMoyenne;

int wChoix1;
int wChoix2;
int wChoix3;

static int wCompteur;

};

int Etudiant::wCompteur = 0;



//A mettre dans un fichier Etudiant.cpp

Etudiant::Etudiant(string nom ,int id ,float moyenne,bool etranger,int choix1,int choix2,int choix3) :
wID(id),wNom(nom),wEtranger(etranger),wMoyenne(moyenne),wChoix1(choix1),wChoix2(choix2),wChoix3(choix3)
{
wCompteur++; //Incrémente ton compteur à chaque création d'Etudiant
}

void Etudiant::display()
{
cout << "\n\n";
cout << "Nom : " << wNom << "\nID : " << wID << "\nEtranger : ";
wEtranger ? cout << "Oui": cout << "Non";
cout << "\nMoyenne : " << wMoyenne << "\nChoix 1 : " << wChoix1
    << "\nChoix 2 : " << wChoix2 << "\nChoix 3 : " << wChoix3;
cout << "\n\n";
}



//A mettre dans un fichier Element.hpp et ne pas oublier d'inclure Etudiant.hpp

class Element //Je ne developpe pas cette classe, je ne sais pas ce que tu compte en faire
{
public:



void ajouteElement(Etudiant);
void Display();

private:
//Idem pour les attributs
Etudiant valeur;
Element *suivant;
};


int main()
{

cout << "Il y a " << Etudiant::getCompteur() << " etudiant(s).\n";

Etudiant *eBob = new Etudiant("Bob",154,16.32,true,20,54,63); //Un pointeur pour pouvoir l'objet

cout << "\nIl y a " << Etudiant::getCompteur() << " etudiant(s).\n";
eBob->display();

Etudiant *eJohn = new Etudiant("John",155,10.26,false,18,4,75);

cout << "\nIl y a " << Etudiant::getCompteur() << " etudiant(s).\n";
eBob->display();
eJohn->display();

delete eBob; //supprime un objet

cout << "\nl y a " << Etudiant::getCompteur() << " etudiant(s).\n"; //Le compteur s'est actualiser
eJohn->display();

delete eJohn;

cout << "\nIl y a " << Etudiant::getCompteur() << " etudiant(s).\n";




    cout << "\n\n\n";
    return 0;
}




Mais n'oublie jamais les règles d'encapsulation, les attribues doivent être privés !

Pop70
1
pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
11 avril 2010 à 11:16
J'ai testé ton code, et il fonctionne du moins s'il sont dans le même fichier. A mon avis tu as déclarer ces deux classes dans deux fichiers différents, et tu n'a pas inclus "Etudiant.hpp" dans "Element.hpp".

Autre chose , dans Etudiant tu déclares des variables membres publiques, c'est très très déconseillé, mets les privées et utilise des fonctions publiques pour y accéder.

J'ai aussi du mal à comprendre pourquoi ID, nom, etranger et moyenne sont des pointeurs, mais ça ça dépend de l'utilisation que tu va en faire.


Pop70
0
cs_guernine Messages postés 10 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 3 mai 2010
11 avril 2010 à 19:51
merci pour votre aide je suis encore débutent en c++ donc j'essaye d'évité les petits truck que je ne maitrise pas
en se qui concerne le Id,Nom ...c'est les condition de notre prof il nous a demandé de faire un programme qui nous donne certaine liste
et bien sur on faisons deux Class(Element et Etudient) la première pour créé une liste chainée et la deuxième pour la définition de chaque étudiant. jusqu'à présent j'ai pas réussit a le faire mais je v'ai prendre en considération tes conseille.merci beauuucoup
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
1 mai 2010 à 08:55
Bonjour,

Pour une question C++, merci de poster sur cppfrance.com dans un thème C++.

[ Déplacé sur cppfrance ]
0
Rejoignez-nous