C++ problème avec argument (ou inclusion?)
Fermé
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
-
Modifié par delp95 le 16/12/2012 à 02:02
g723 Messages postés 5 Date d'inscription dimanche 16 décembre 2012 Statut Membre Dernière intervention 17 décembre 2012 - 17 déc. 2012 à 06:12
g723 Messages postés 5 Date d'inscription dimanche 16 décembre 2012 Statut Membre Dernière intervention 17 décembre 2012 - 17 déc. 2012 à 06:12
A voir également:
- C++ problème avec argument (ou inclusion?)
- Argument non facultatif vba ✓ - Forum VB / VBA
- Python est introuvable. exúcutez sans argument pour procúder ó l - Forum Python
- Argument bash - Astuces et Solutions
- [PyCharm] Pas d'interpréteur python ✓ - Forum Python
- Argument ou appel de procédure incorrect - Forum Programmation
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
16 déc. 2012 à 10:49
16 déc. 2012 à 10:49
Pourrait-on savoir ce que tu as mis pour déclarer et définir Visitor dans Visitor.hpp et Visitor.cpp ?
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
16 déc. 2012 à 14:26
16 déc. 2012 à 14:26
Mon Visitor.hpp est comme ceci :
Je n'ai pas de Visitor.cpp car c'est une classe virtuelle.
#ifndef VISITOR_HPP #define VISITOR_HPP #include "MyType.hpp" #include "Op.hpp" class Visitor { public: virtual void visitNode(MyType* m) const = 0; virtual void visitOp(Op* o) const = 0; }; #endif
Je n'ai pas de Visitor.cpp car c'est une classe virtuelle.
g723
Messages postés
5
Date d'inscription
dimanche 16 décembre 2012
Statut
Membre
Dernière intervention
17 décembre 2012
1
Modifié par g723 le 16/12/2012 à 17:27
Modifié par g723 le 16/12/2012 à 17:27
poste :
- le log de compilation
- "MyType.hpp" et "Op.hpp"
- le log de compilation
- "MyType.hpp" et "Op.hpp"
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
16 déc. 2012 à 18:35
16 déc. 2012 à 18:35
Voici Op.hpp (MyType.hpp est similaire) :
MyType et Op dérive de Exp que voici :
Qui hérite elle même de Visitable :
#ifndef OP_H #define OP_H #include <string> #include <iostream> #include "Exp.hpp" using namespace std; class Op : public Exp //Op dérive de Exp { public : virtual void display(); virtual int accept(Visitor* v) const; }; #endif
MyType et Op dérive de Exp que voici :
#ifndef EXPRESSION_H #define EXPRESSION_H #include <string> #include <iostream> #include "Visitable.hpp" //#include "Visitor.hpp" using namespace std; class Expression : public Visitable { public : virtual void display()=0; virtual int accept(AbstractVisitor* v) const = 0; }; #endif
Qui hérite elle même de Visitable :
#ifndef VISITABLE_HPP #define VISITABLE_HPP #include "Visitor.hpp" class Visitable { public: virtual int accept(Visitor* v) const = 0; }; #endif
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
g723
Messages postés
5
Date d'inscription
dimanche 16 décembre 2012
Statut
Membre
Dernière intervention
17 décembre 2012
1
Modifié par g723 le 16/12/2012 à 20:35
Modifié par g723 le 16/12/2012 à 20:35
Compilons exp.cpp ( on suppose qu' il inclus exp.h ) ; inclusions successives :
Et là il y aura une erreur car le code de MyType.h va être lu et il va utiliser un visitor*, non déclaré.
Pour éviter ça ( certains diront qu'il y a plutôt une erreur de conception blah blah blah ) utilise un fichier common.h qui déclare toutes les classes:
#ifndef COMMON_HPP
#define COMMON_HPP
class Visitable;
class Visitor;
class Exp;
...etc...
#endif
#define code exp.h + - visitable.h + - visitor.h + - mytype.h + - exp - -
Et là il y aura une erreur car le code de MyType.h va être lu et il va utiliser un visitor*, non déclaré.
Pour éviter ça ( certains diront qu'il y a plutôt une erreur de conception blah blah blah ) utilise un fichier common.h qui déclare toutes les classes:
#ifndef COMMON_HPP
#define COMMON_HPP
class Visitable;
class Visitor;
class Exp;
...etc...
#endif
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
16 déc. 2012 à 21:29
16 déc. 2012 à 21:29
Ah oui, c'est une solution !
Mais est ce que c'est une façon "propre" de faire ?
Mais est ce que c'est une façon "propre" de faire ?
g723
Messages postés
5
Date d'inscription
dimanche 16 décembre 2012
Statut
Membre
Dernière intervention
17 décembre 2012
1
17 déc. 2012 à 06:12
17 déc. 2012 à 06:12
> certains diront qu'il y a plutôt une erreur de conception
D' autre part si tu veux inliner dans tes headers, là tu seras vraiment bloqué(e)
D' autre part si tu veux inliner dans tes headers, là tu seras vraiment bloqué(e)