C++ problème avec argument (ou inclusion?)
delp95
Messages postés
20
Statut
Membre
-
g723 Messages postés 5 Statut Membre -
g723 Messages postés 5 Statut Membre -
Bonjour à tous,
Je rencontre actuellement un problème dans ma programmation : en essayant de compiler j'obtiens le message suivant "'Visitor' has not been declared".
Pourtant là je fais un .hpp, donc dans les prototypes on met juste les arguments que les fonctions vont utiliser normalement... et j'ai bien inclu "Visitor.hpp".
Voici la déclaration de ma classe Visitable.hpp:
Je vous remercie par avance pour votre soutien.
Je rencontre actuellement un problème dans ma programmation : en essayant de compiler j'obtiens le message suivant "'Visitor' has not been declared".
Pourtant là je fais un .hpp, donc dans les prototypes on met juste les arguments que les fonctions vont utiliser normalement... et j'ai bien inclu "Visitor.hpp".
Voici la déclaration de ma classe Visitable.hpp:
#ifndef VISITABLE_HPP
#define VISITABLE_HPP
#include "Visitor.hpp"
class Visitable
{
public:
virtual void accept(Visitor* v) const = 0;
};
#endif
Je vous remercie par avance pour votre soutien.
A voir également:
- C++ problème avec argument (ou inclusion?)
- Erreur argument casio graph 35+e - Forum calculatrices
- ERREUR ARGUMENT - Forum Matériel & Système
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Type d'argument byref incompatible - Forum Xpress
- Executer un programe python dans la console ✓ - Forum Python
7 réponses
Pourrait-on savoir ce que tu as mis pour déclarer et définir Visitor dans Visitor.hpp et Visitor.cpp ?
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.
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
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