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 :

‘Arbre’ does not name a type


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 121
    Par défaut ‘Arbre’ does not name a type
    Bonjour tout le monde,

    J'ai un peu de mal en C++ et je n'arrive pas à trouver l'erreur du projet que je viens tout juste de commencer

    Je souhaite créer une classe Arbre et une classe Foret.
    Un Arbre contient une Foret .
    Une Foret contient une Foret et un Arbre.

    Voici les 4 classes correspondantes :

    arbre.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef _ARBRE_H
    #define	_ARBRE_H
     
    #include "foret.hpp"
     
    class Arbre{
          private :
                  Foret foret();
     
          public :
                 Arbre(char *);
    };
    #endif	/* _ARBRE_H */
    arbre.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "arbre.hpp"
     
    Arbre::Arbre(char* chemin) {}
    foret.hpp
    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
    #ifndef _FORET_H
    #define	_FORET_H
     
    #include"arbre.hpp"
     
    class Foret {
    	private :
    	    Arbre premierArbre("plop");
    	    Foret rest();
     
    	public:
    	    Foret();
     
    };
    #endif	/* _FORET_H */
    foret.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "foret.hpp"
     
    Foret::Foret() {
     
    }
    Quand je compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gcc -Wall -pedantic -c arbre.cpp -o arbre.o
    In file included from arbre.hpp:4,
                     from arbre.cpp:1:
    foret.hpp:9: erreur: ‘Arbre’ does not name a type
    Après une bonne heure de recherche je dois me résoudre à ne pas trouver l'erreur qui doit être très bète.


    Auriez-vous une idée ?


    PS : Si vous voyez des choses moches ou pas propre dans ces 4 fichiers, n'hésitez pas à critiquer même si ça n'a rien à voir.

  2. #2
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Hello,
    Deja, il me semble que tu va avoir un probleme d'inclusion multiple dans ton code (regarde la FAC pour ca, y'a une explication je crois). Ensuite, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Arbre premierArbre("plop");
    n'a pas de sens dans la declaration d'une classe. A la rigueur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Arbre premierArbre(const  char*);
    mais je ne sais pas trop ce que tu veux faire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 121
    Par défaut
    Je pensais que l'inclusion multiple serait réglée avec les "#ifndef".

    Pour le "plop" ce n'est qu'un exemple pour tester le programme. Je ne pense pas que ce soit lui qui pose problème actuellement.

    Sinon ce que je veux faire : une structure d'arbre.
    Chaque Arbre contiendra un noeud et des fils.
    L'ensemble des fils d'un arbre est une Foret.

    Cela permet d'avoir des fonctions (de recherche, d'inclusion) relativement simple à coder bien que coûteuse car récursive.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le problème d'inclusion multiple n'est que partiellement géré par les gardes anti inclusion...

    Ils permettent uniquement d'éviter les inclusions multiples lorsque qu'un même fichier d'en-tête est inclus plusieurs fois, de manière directe ou indirecte, dans un autre fichier...

    Ici, tu te trouve dans le cadre, non pas d'une inclusion multiple, mais bien d'une inclusion circulaire:

    Arbre.h inclus foret.h, qui inclus Abre.h qui inclus...

    Le pire de l'histoire, c'est qu'on peut effectivement envisager le fait que, si la foret a réellement besoin de connaitre l'arbre, l'arbre ait effectivement besoin de connaitre la foret...(on parle de référence croisée entre deux classes)

    Par chance, il se fait que, si, pour définir ta classe Foret, tu peux - effectivement - avoir besoin de la définition de la classe Arbre, tu peux te contenter d'une déclaration anticipée de Foret pour définir la classe Arbre:

    La définition de Foret ne sera utile à Arbre que lorsque tu voudra accéder à des données de la foret au départ de l'arbre
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    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
    Un arbre devra posséder une référence sur sa forêt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef _ARBRE_H
    #define	_ARBRE_H
     
    #include "foret.hpp"
     
    class Arbre{
          private :
                  Foret& foret;
     
          public :
                 Arbre(char *);
    };
    #endif	/* _ARBRE_H */

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par poukill Voir le message
    Un arbre devra posséder une référence sur sa forêt.
    Ou un pointeur, si l'on envisage le fait qu'un arbre puisse ne pas faire partie d'une foret ...

    (au fait, personne n'a remarqué l'horreur suivante dans le code SAKDOSS : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Arbre{
          private :
                  Foret foret(); //<<ouch
    Veux tu réellement déclarer une fonction privée nommée foret et renvoyant une instance de foret

    Cela me semble vraiment suspect
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. does not name a type
    Par emmesse dans le forum Débuter
    Réponses: 3
    Dernier message: 27/08/2014, 16h23
  2. error: ‘i1’ does not name a type
    Par JackStrieger dans le forum C++
    Réponses: 3
    Dernier message: 15/01/2014, 15h23
  3. [QtKeychain] 'Q_CORE_EXPORT_INLINE' does not name a type
    Par sliverTwist dans le forum Débuter
    Réponses: 18
    Dernier message: 06/03/2013, 15h45
  4. Colonne’ does not name a type
    Par tamtoum1987 dans le forum C++
    Réponses: 7
    Dernier message: 23/03/2012, 09h19
  5. error : does not name a type // je n'y comprends rien
    Par djobanaille dans le forum C++
    Réponses: 6
    Dernier message: 19/11/2005, 10h25

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