Bien le bonjour à tous,
Je viens vous demander un peu d'aide parce que j'ai un problème que je n'arrive pas à résoudre.
Mon problème est de faire pour un projet un solver sudoku avec cloisonnement des classes et de l'interface graphique.
Le prof nous ayant donné un fichier permettant de faire le lien entre notre interface graphique (ici console) et nos classe mais je me choppe des erreurs à la compilation.
Voici le fichier d'interface (classe de base) :
Code :
- #ifndef INTERFACE_SUDOKU
- #define INTERFACE_SUDOKU
- class InterfaceSudoku
- {
- public:
-
- virtual void setValeur(int i,int j,int value);
- virtual void delValeur(int i,int j);
- virtual int getValeur(int i,int j);
- virtual void getPossibilite(int i,int j, bool * possibilite);
- virtual void resoudre();
- virtual void genere();
- virtual void vide(int difficulte);
- };
- #endif
|
Voici la classe qui hérite de cette classe :
Code :
- #ifndef __PLATEAU__
- #define __PLATEAU__
- #inclusion diverses
- class Plateau : public InterfaceSudoku {
- Region * regions[NB_REGION_PAR_LIGNE][NB_REGION_PAR_COLONNE];
- Ligne * lignes[NB_LIGNE_PLATEAU];
- Colonne * colonnes[NB_COLONNE_PLATEAU];
- vector<Elt> parcours;
- vector<Case*> parcoursAleatoire;
- public :
- void setValeur(int i,int j,int value);
-
- void delValeur(int i,int j);
-
- int getValeur(int i,int j);
-
- void getPossibilite(int i,int j, bool * possibilite);
-
- void resoudre();
-
- void genere();
-
- void vide(int difficulte);
- };
- #endif
|
Voici comment l'on ma dit d'utiliser ensuite la classe dans la fonction main pour instancier un objet du type plateau :
Code :
- Interface * Interf = new Plateau();
|
Et voici les messages d'erreur que je me chope :
FonctionsStatiques.o(.gnu.linkonce.t._ZN15InterfaceSudokuC2ERKS_+0x8): In function `InterfaceSudoku::InterfaceSudoku(InterfaceSudoku const& )':
: undefined reference to `vtable for InterfaceSudoku'
Plateau.o(.gnu.linkonce.t._ZN15InterfaceSudokuC2Ev+0x8): In function `InterfaceSudoku::InterfaceSudoku()':
: undefined reference to `vtable for InterfaceSudoku'
Plateau.o(.gnu.linkonce.r._ZTI7Plateau+0x8): undefined reference to `typeinfo for InterfaceSudoku'
collect2: ld a retourné 1 code d'état d'exécution
make: *** [sudoku_solver] Erreur 1
|
Est-ce que je me trompe dans la déclaration des mes classes ? Après le prof m'a expliqué qu'il fallait utiliser les fonctions virtuelles de la classe Interface pour qu'il aille chercher les fonctions de la classe Plateau. Ainsi si quelqu'un voudrait utiliser mon interface avec ses classes, celà peut se faire sans modifications importantes.
Le problème peut être aussi c'est que je doit inclure le fichier plateau.h dans un fichier contenant les fonctions "statiques" permettant la résolution du sudoku, mais le fichier fonctionsstatiques.h inclus également le fichier plateau.h. Cet sorte de dépendance cyclique me sort des erreurs de compilation malgrès les #ifndef Constante et #define Constante. Je contourne ce truc en incluant "fonctionsstatiques.h" dans le plateau.cpp.
Comment faire des includes cyclique sans que celà pose problème au niveau de la compilation ? Les conditions #ifndef et la définition de la constante ne devrait-elles pas résoudre les inclusions au niveau du préprocesseur et ne pas inclure deux fois le fichier entete.
En vous remerçiant d'avance pour l'aide que vous pourrez m'apporter et désolé pour la longueur du post.
@ +