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 :

Problème avec les inclusions de fichiers d'en-tête


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut Problème avec les inclusions de fichiers d'en-tête
    Bonjour,
    J'ai un problème avec les inclusions de fichiers d'en-tête. Je ne sais pas trop comment vous présenter le
    problème alors je vais être direct. Je vais vous montrer deux fichiers d'en-tête et vous expliquer comment
    je vois le problème.


    Voici un bout du fichier main.cpp et des deux fichiers d'en-tête :

    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1. #include "Manage_piece.h"
    2. #include "Piece.h"
    3. #include "Grid.h"
    4. #include "Case.h"
    5. [...]
    Grid.h :
    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
     
    1.  #ifndef GRID_H
    2.
    3.     #define GRID_H
    4.
    5.     #include <vector>
    6.     #include "global.h"
    7.     #include "Piece.h"
    8.     #include "Case.h"
    9. 
    10.    class Grid
    11.    {
    12.        public :
    13.            [...]
    14.            Case * On_free_location ( const Piece & arg_piece );
    15.            friend void Case :: Inc_nb_filled_cases ( Grid & arg_grid );
    16.            [...]
    17.    };
    18.
    19. #endif
    Case.h
    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
     
    1.  #ifndef CASE_H
    2.  
    3.      #define CASE_H
    4.  
    5.      #include "global.h"
    6.      #include "Grid.h"
    7.  
    8.
    9.      class Case
    10.     {
    11.         public :
    12.             [...]
    13.             void Inc_nb_filled_cases ( Grid & arg_grid );
    14.             [...]
    15.     };
    16.
    17. #endif
    Maintenant, voilà comment je pense que le problème apparait :
    1. [main.cpp; ligne 3 ] Inclusion de Grid.h

    2. [Grid.h; ligne 3 ] Définition de GRID_H
    3. [Grid.h; ligne 8 ] Inclusion de Case.h

    4. [Case.h; ligne 3 ] Définition de CASE_H
    5. [Case.h; ligne 6 ] GRID_H est déjà défini, on n'inclut pas Grid.h
    6. [Case.h; ligne 13 ] **Erreur: le type Grid (dans la signature de la méthode Inc_nb_filled_cases) est inconnu puisqu'il est déclaré après cette méthode.**

    7. [main.cpp; ligne 4 ] CASE_H est déjà défini, on n'inclut pas Case.h

    Dans Grid.h le type Case est inconnu.
    Dans Case.h le type Grid est inconnu.


    Comment faire en sorte pour que ces types soient connus du compilateur ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut
    dans Case.h tu inclus Grid.h donc le fichier qui inclue Case.h ne necessite pas l'inclusion de Grid.h .
    resonne de cette facon pour eliminer les inclusions non nécessaire

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour et bienvenu,
    Tu es typiquement dans le cas où il faut savoir séparer déclaration et définition :
    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
     
     
    1.  #ifndef CASE_H
    2.  
    3.      #define CASE_H
    4.  
    5.      #include "global.h"
    6.      class Grid ;
    7.  
    8.
    9.      class Case
    10.     {
    11.         public :
    12.             [...]
    13.             void Inc_nb_filled_cases ( Grid & arg_grid );
    14.             [...]
    15.     };
    16.
    17. #endif
    Puis le include dans Case.cpp.

    P.S.: je suis toujours inquiet pour la conception quand je vois des friend...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    Merci, le problème est résolu.
    Sinon pour le friend, c'est vrai que j'ai très TRES mal pensé l'intégralité de mon code. En fait je l'ai pas pensé du tout, alors j'étais bien embêté et j'ai du utiliser le mot clé friend.

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

Discussions similaires

  1. Problème avec les chargements de fichiers exécutables
    Par Naish72 dans le forum Visual C++
    Réponses: 7
    Dernier message: 06/05/2008, 15h21
  2. Sale problème avec les strings et les fichiers
    Par acieroid dans le forum C++
    Réponses: 18
    Dernier message: 26/04/2006, 09h47
  3. Réponses: 6
    Dernier message: 17/11/2005, 14h39
  4. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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