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 :

Héritage et include


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut Héritage et include
    Bonjour à tous,

    C'est la première fois que je fais de l'héritage en C++ et j'ai un problème au niveau des include des .hh.
    J'ai quatre classes (avec pour chaque un .cc et .hh (dans le .hh il y a les déclarations des attributs de classes et des méthodes)).
    La première est une classe "conteneur" Ecole qui a un tableau de Personne.
    La seconde est la classe Personne est la classe mère des deux dernières classes Professeur et Etudiant.

    Jusque là ça va mais après pour les include je recontre des problèmes de redéfinition de la classe Personne.
    Mon erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    In file included from Etudiant.hh:1,
                     from Ecole.hh:2,
                     from Ecole.cc:6:
    Personne.hh:5: error: redefinition of `class Personne'
    Personne.hh:5: error: previous definition of `class Personne
    Dans mes fichiers .hh j'avais comme include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ecole.hh
    #include "Etudiant.hh"
    #include "Professeur.hh"
     
    Professeur.hh
    #include "Personne.hh"
     
    Etudiant.hh
    #include "Personne.hh"
    Avec ce code c'est sûr que j'ai une redéfinition mais en essayant d'autres façons je suis parvenu à trouver quelque chose qui marche mais qui n'est sûrement pas propre. J'ai dû mettre le contenu (déclarations des attributs de classes et des méthodes) des .hh des classes Professeur et Etudiant dans le .hh de Personne. J'ai supprimé les .hh de Professeur et Etudiant. Donc finalement je n'ai plus que le #include "Personne.hh" dans la classe Ecole.

    J'aurais besoin de votre aide pour résoudre ce problème, si vous avez des suggestions n'hésiter pas.

    Merci de vos réponses

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Tu as bien mis dans chaque fichier .hh les directives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef ON_SEN_FOUT_TANT_QUE_CEST_UNIQUE
    #define ON_SEN_FOUT_TANT_QUE_CEST_UNIQUE
    ...//tout le reste
    #endif
    ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Merci zais_ethael de ta réponse.

    Non, je n'ai pas mis dans chaque fichier .hh les directives car on ne m'a jamais dit qu'il fallait en mettre que ça soit en C ou en C++.

    Donc je vais essayer et je dirais si ça marche.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Je viens de tester et ça marche.

    Merci beaucoup de ton aide zais_ethael.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Erreur de débutant, c'est pas grave.
    Il faut toujours en mettre partout que ce soit en C ou en C++. Si tu es à cours d'idée pour le nom de la constante on utilise généralement un mot style _NOM_DU_FICHIER_HH_, ça évite les redondances.

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par zais_ethael
    Erreur de débutant, c'est pas grave.
    Il faut toujours en mettre partout que ce soit en C ou en C++. Si tu es à cours d'idée pour le nom de la constante on utilise généralement un mot style _NOM_DU_FICHIER_HH_, ça évite les redondances.
    On évite d'utiliser des noms qui commencent par _, pas mal sont réservés à l'implémentation de même que ceux qui contiennent deux __.

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

Discussions similaires

  1. Héritage et Include
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 01/03/2009, 12h41
  2. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  3. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  4. #include "math.h" et #include <math.h>
    Par pounka dans le forum C
    Réponses: 4
    Dernier message: 01/05/2003, 21h06
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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