IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

classe imbriquée dans 1 autre


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut classe imbriquée dans 1 autre
    Bonjour à tous, voila j'ai 1 petit souci, sans doute que le probléme a dèjà été posé, mais je ne trouve pas. Je désire faire une classe CPersonne qui contient des variables membres qui elles même sont des classes voila mon code. A la compilation il ya des erreurs domme celle-ci:
    error C2079: 'CPersonne::m_oIdentityPers' utilise une class de 'CNom' non défini

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #ifndef CPERSONNE_H
    #define CPERSONNE_H
     
    class CNom;
    class CDate;
    class CAdresse;
    class CTelephone;
    class CChaine;
    /*********************class CPersonne**************************/
    //*********classe contenant des sous classes*****************//
    class CPersonne
    {
    public:
    	CPersonne(void);
    	~CPersonne(void);
    private:
    	CNom m_oIdentityPers;
    	CDate m_oBirthDate, m_oDeathDate;
    	int m_dSex;
    	CChaine m_oNationalite;
    	CAdresse m_oAdresse;
    	CTelephone m_oTel;
    };
     
    //*********************class CChaine*******************/
    class CChaine
    {
    private:
    	int m_dSize;
    	char *m_psTab;
    public:
    	CChaine();
    	~CChaine();
    };
     
    /**********************Classs CNOM**********************/
    class CNom
    {
    private:
    	CChaine m_oNom, m_oPrenom, m_oTitre, m_oSurnom;
    public:
    	CNom();
    	~CNom();
    };
     
    /*********************Classs CDate**********************/
    class CDate
    {
    private:
    	int m_dJour, m_Mois, m_Annee;
    public:
    	CDate();
    	~CDate();
    };
     
    /********************Classs CAdresse********************/
    class CAdresse
    {
    private:
    	CChaine m_oRue, m_oCodePostal, m_oVille, m_oPays;
    	int m_dNum;
    public:
    	CAdresse();
    	~CAdresse();
    };
     
    /*********************class CTelephoe*****************/
    class CTelephone
    {
    private:
    	CChaine m_oPrefixe;
    	int m_dTelNum;
    public:
    	CTelephone();
    	~CTelephone();
    };
     
    #endif CPERSONNE_H

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Normal CNom n'est pas défini.
    Il faudrait que ce soit un pointeur pour que ça marche....

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par défaut
    Salut,
    Si tu déclares tes classes dans un ordre tenant compte de leurs futures utilisation, ça compilera sans pbs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    #ifndef CPERSONNE_H
    #define CPERSONNE_H
     
    //*********************class CChaine*******************/
    class CChaine
    {
    private:
    	int m_dSize;
    	char *m_psTab;
    public:
    	CChaine();
    	~CChaine();
    };
     
    /**********************Classs CNOM**********************/
    class CNom
    {
    private:
    	CChaine m_oNom, m_oPrenom, m_oTitre, m_oSurnom;
    public:
    	CNom();
    	~CNom();
    };
     
    /********************Classs CAdresse********************/
    class CAdresse
    {
    private:
    	CChaine m_oRue, m_oCodePostal, m_oVille, m_oPays;
    	int m_dNum;
    public:
    	CAdresse();
    	~CAdresse();
    };
     
    /*********************Classs CDate**********************/
    class CDate
    {
    private:
    	int m_dJour, m_Mois, m_Annee;
    public:
    	CDate();
    	~CDate();
    };
     
    /*********************class CTelephoe*****************/
    class CTelephone
    {
    private:
    	CChaine m_oPrefixe;
    	int m_dTelNum;
    public:
    	CTelephone();
    	~CTelephone();
    };
     
    /*********************class CPersonne**************************/
    //*********classe contenant des sous classes*****************//
    class CPersonne
    {
    public:
    	CPersonne(void);
    	~CPersonne(void);
    private:
    	CNom m_oIdentityPers;
    	CDate m_oBirthDate, m_oDeathDate;
    	int m_dSex;
    	CChaine m_oNationalite;
    	CAdresse m_oAdresse;
    	CTelephone m_oTel;
    };
     
    #endif CPERSONNE_H

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut
    mercipour la réponse, je pensais que le fait d'écrire
    class CNom;
    par exemple pour citer celui-là avant de définir la classe CPersonne
    et puis de définir la dite-classe après suffisait pour que le compilateur se retrouve....

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut
    Salut,
    Si tu déclares tes classes dans un ordre tenant compte de leurs futures utilisation, ça compilera sans pbs.
    ceci me donne 1 peu plus d'erreur à la comilation des erreurs du style
    Personne.obj : error LNK2019: symbole externe non résolu "public: __thiscall CAdresse::~CAdresse(void)" (??1CAdresse@@QAE@XZ) référencé dans la fonction __unwindfunclet$??

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Citation Envoyé par coold Voir le message
    mercipour la réponse, je pensais que le fait d'écrire
    class CNom;
    par exemple pour citer celui-là avant de définir la classe CPersonne
    et puis de définir la dite-classe après suffisait pour que le compilateur se retrouve....
    Ça marche pour les pointeurs, mais pas pour les variables "brutes" : Le compilo doit connaître la taille de la classe avant de pouvoir coller une variable de ce type dans une autre, sinon il ne peut pas calculer la taille de la seconde classe...

    En clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class CUneClasse;
     
    class CUneAutreClasse
    {
    	CUneClasse *pObj; //Oui
    	CUneClasse obj; //Non
    };
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut
    Merci Médinoc
    ça marche , ya t-il des références qui développe le sujet notions car j'avoue que je n'ai pas réllement bien compris, c'est 1 peu flou.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/10/2006, 13h39
  2. Réponses: 6
    Dernier message: 31/08/2006, 15h19
  3. Réponses: 1
    Dernier message: 05/05/2006, 14h37
  4. Réponses: 4
    Dernier message: 15/03/2006, 11h22
  5. Réponses: 4
    Dernier message: 08/11/2005, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo