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 :

#include bidirectionnel cause des problèmes


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut #include bidirectionnel cause des problèmes
    Bonjour,

    Je veux implémenter le patron "Visiteur" afin de passer au travers de mon arbres.
    Deux classes sont présentes: Visitor et Node. Voici leur contenu (seulement les headers):

    Visitor:
    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 VISITOR_H_
    #define VISITOR_H_
     
    #include "Scene/Node.h" 
     
    class Visitor
    {
    public:
    	Visitor();
    	virtual ~Visitor();
    	virtual void visit(Node * p){};
    };
     
    #endif /*VISITOR_H_*/
    Node:
    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
     
    #ifndef NODE_H_
    #define NODE_H_
     
    #include "Scene/Visitor.h"
     
    class Node
    {
    public:
    	Node();
    	virtual ~Node();
    	void addChild(Node * child);
    	virtual void accept(Visitor * visitor){};
     
    protected:
    	int size;
    	Node * childList;
     
    };
     
    #endif /*NODE_H_*/
    Il semble y avoir un problème du fait que j'inclu (#include) Node.h dans Visitor.h et Visitor.h dans Node.h.

    Il me sort comme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    In file included from Scene\/Node.h:4,
                     from Scene\Node.cpp:1:
    ./Scene/Visitor.h:11: error: variable or field `visit' declared void
    ./Scene/Visitor.h:11: error: `visit' declared as a `virtual' field
    ./Scene/Visitor.h:11: error: expected `;' before '(' token
    Cet erreur ne semble pas vraiment clair, en tout cas, pour moi elle ne l'est pas.

    Tout aide serait apprécié, si je ne suis pas assez clair, faite le moi savoir, j'éclaircirai du mieux que je peux.

    Merci à l'avance.

    Mat

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Et si tu ajoutes une déclaration de la classe utilisée ?

    Cela donnerait pour Visitor :

    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
    #ifndef VISITOR_H_
    #define VISITOR_H_
     
    class Node;
     
    #include "Scene/Node.h" 
     
    class Visitor
    {
    public:
    	Visitor();
    	virtual ~Visitor();
    	virtual void visit(Node * p){};
    };
     
    #endif /*VISITOR_H_*/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut Eusebe,

    J'avais déjà essayé cette façon, mais lorsque, par exemple, je tente d'ajouter la classe PrintVisitor qui hérite de Visitor, voici le code:

    PrintVisitor:
    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 PRINTVISITOR_H_
    #define PRINTVISITOR_H_
     
    #include "Scene/Visitor.h"
     
    class PrintVisitor : public Visitor
    {
    public:
    	PrintVisitor();
    	virtual ~PrintVisitor();
    	void visit(Node * p);
    };
     
    #endif /*PRINTVISITOR_H_*/
    Un erreur dans le fichier compilé ressort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    release\PrintVisitor.o(.rdata$_ZTV12PrintVisitor[vtable for PrintVisitor]+0x10):PrintVisitor.cpp: undefined reference to `PrintVisitor::visit(Nodemingw32-make[1]: Leaving directory `g:/workspace/LAB2'
    *)'
    collect2: ld returned 1 exit status

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    http://c.developpez.com/faq/cpp/?pag...erence_croisee

    Sinon pour ton erreur, on dirait que tu as juste oublié d'implémenter la fonction en question...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut Laurent Gomila,

    Merci, ça fonctionne. Pas trop évident de règler ce type de problème lorsqu'on passe de Java à C++. En Java, je fais des "import" où bon me semble sans me soucier de se genre de problème. Il doit surment en faire la gestion dans la VM.

    Merci encore.

    Mat

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

Discussions similaires

  1. [Débutant] Win7 64bit me cause des problèmes (Crystal report)
    Par newvitch dans le forum EDI/Outils
    Réponses: 0
    Dernier message: 30/05/2012, 17h42
  2. Ma souris Mac me cause des problèmes
    Par lexington dans le forum Apple
    Réponses: 2
    Dernier message: 13/01/2009, 12h33
  3. php5 cause des problèmes à mes onglets
    Par philippe57460 dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2008, 15h33
  4. suppression des caches me cause des problèmes
    Par sarahG dans le forum Langage
    Réponses: 4
    Dernier message: 09/05/2008, 15h39
  5. Problème d'addition à cause des NULL
    Par Oluha dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/03/2005, 13h53

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