Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1644 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Méthodes virtuelles, création d'interface.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Méthodes virtuelles, création d'interface.

n°1477334
neomenphys​1
Posté le 17-11-2006 à 14:31:00  profilanswer
 

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 :
  1. #ifndef INTERFACE_SUDOKU
  2. #define INTERFACE_SUDOKU
  3. class InterfaceSudoku
  4. {
  5. public:
  6.        
  7. virtual void setValeur(int i,int j,int value);
  8. virtual void delValeur(int i,int j);
  9. virtual int getValeur(int i,int j);
  10. virtual void getPossibilite(int i,int j, bool * possibilite);
  11. virtual void resoudre();
  12. virtual void genere();
  13. virtual void vide(int difficulte);
  14. };
  15. #endif


 
Voici la classe qui hérite de cette classe :

Code :
  1. #ifndef __PLATEAU__
  2. #define __PLATEAU__
  3. #inclusion diverses
  4. class Plateau : public InterfaceSudoku {
  5. Region * regions[NB_REGION_PAR_LIGNE][NB_REGION_PAR_COLONNE];
  6. Ligne * lignes[NB_LIGNE_PLATEAU];
  7. Colonne * colonnes[NB_COLONNE_PLATEAU];
  8. vector<Elt> parcours;
  9. vector<Case*> parcoursAleatoire;
  10. public :
  11.     void setValeur(int i,int j,int value);
  12.    
  13.     void delValeur(int i,int j);
  14.    
  15.     int getValeur(int i,int j);
  16.    
  17.     void getPossibilite(int i,int j, bool * possibilite);
  18.    
  19.     void resoudre();
  20.    
  21.     void genere();
  22.    
  23.     void vide(int difficulte);
  24. };
  25. #endif


 
Voici comment l'on ma dit d'utiliser ensuite la classe dans la fonction main pour instancier un objet du type plateau :

Code :
  1. 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.
@ +  :wahoo:  

mood
Publicité
Posté le 17-11-2006 à 14:31:00  profilanswer
 

n°1477354
_darkalt3_
Proctopathe
Posté le 17-11-2006 à 14:39:28  profilanswer
 


 
 
 
 
neomenphys1 a écrit :
 
 
[quote]Est-ce que je me trompe dans la déclaration des mes classes ? [/quotemsg]
Les methodes de ta classe tableau peuvent rester virtuelles, et proposer une implementation pour le plateau. Ca manque de constructeur et de destructeur aussi.

 

[quote]Comment faire des includes cyclique sans que celà pose problème au niveau de la compilation ? [/quotemsg]
Non, il faut faire ca correctement, sinon tu as un probleme de conception.


---------------
Töp of the plöp
n°1477388
Taz
bisounours-codeur
Posté le 17-11-2006 à 15:06:49  profilanswer
 

l'intéret de cette interface ?
 
sinon reprend ton cours de C++ ... il est où le destructeur virtuel !
c'est quoi ce include guard à la noix ? tu veux pas carrément utiliser STACK_H tant qu'à faire ?

n°1477394
_darkalt3_
Proctopathe
Posté le 17-11-2006 à 15:10:22  profilanswer
 

Je percute que maintenant, mais l'interface de cloisonnement a ete bien interpretee ?  
A mon sens pour cloisonner l'IHM du reste du cote on utilise une Facade (ou interface) au sens pattern, pas au sens objet.
 
(dsl pour les accents je suis sur un clavier US)


---------------
Töp of the plöp
n°1477575
++fab
victime du syndrome IH
Posté le 17-11-2006 à 17:54:33  profilanswer
 

Citation :

Et voici les messages d'erreur que je me chope :
[fixed]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


Tu n'as a pas défini au moins une des fonctions de la classe de base (c'est une erreur au moment de l'édition de lien)
 

Citation :

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.


Ce contournement est la bonne façon de faire.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Méthodes virtuelles, création d'interface.

 

Sujets relatifs
[C-ANSI] Création SocketUser Interface Process
Utilisation de UIA (User Interface Application Block)Méthodes de Document de javascript
[C#/résolu] type template avec méthodes connues par avance[Java] Interface Graphique : pb setLocation & setSize
création dynamique de nouvelles colonnes d'un listviewcréation d'un script avec namo web editor 5.5
[RESOLU] Ordre d'execution a la creation dune form ?je voudrais un conseil sur les logiciels de création
Plus de sujets relatifs à : Méthodes virtuelles, création d'interface.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR