Passage d'une Structures en parametre

Passage d'une Structures en parametre - C++ - Programmation

Marsh Posté le 05-02-2006 à 19:26:05    

Les structures me posent vraiment probleme  :fou:  
 
Voila, dans une classe Model, j'ai declaré une structure Case.
Dans une classe View, je souhaite pouvoir dessiner cette Case et j'ai donc une methode DrawCase qui doit avoir en parametre une Case.
 
Voici l'en tête Model :
 

Code :
  1. class Model{
  2. public:
  3.   Model();
  4.   ~Model(){};
  5.   struct Pion{ 
  6.     int numeropion;
  7.     int numerocase;
  8.     bool couleur;
  9.   };
  10.   struct Case{
  11.     int numerocase;
  12.     bool couleur;
  13.     Pion* pion;
  14.   };
  15. private:
  16. };


 
l'en tete de View suivit de sa source
 

Code :
  1. #include "Model.h"
  2. #ifndef View_h
  3. #define View_h
  4. class View{
  5. public:
  6.   View();
  7.   ~View(){};
  8.  
  9.   void drawCase(struct Case * c, EasyWindow* _fenetre);
  10. private:
  11.   EasyWindow* fenetre; // Fenetre graphique
  12.  
  13. };


 

Code :
  1. void View::drawCase(struct Case * c, EasyWindow* _fenetre){// Dessine une Case
  2.   cout<<c->numerocase<<endl;
  3. }


 
Cependant, ca ne marche pas  :D  et voici l'erreure de compilation
View.cpp:23: error: invalid use of undefined type `struct Case'
View.h:23: error: forward declaration of `struct Case

 
View.cpp:23 correspond a la ligne 2 de la source cpp
et View.h:23: à la ligne 12 de l'en tete view
 
J'ai l'impression que l'objet View ne connait tout simplement pas la structure Case alors que je fait bien un include de Model.  
Je me demande donc s'il est vraiment possible pour View de voir la declaration de Case ds l'Objet Model ...

Reply

Marsh Posté le 05-02-2006 à 19:26:05   

Reply

Marsh Posté le 05-02-2006 à 19:38:37    

on est pas en C, le 'struct' est de trop et Case est un type encapsulé dans Model, sont nom dans le context global est Model::Case
 

Code :
  1. void drawCase(Model::Case * c, EasyWindow* _fenetre);


 
et utilises plutot des références


Message édité par skelter le 05-02-2006 à 19:39:01
Reply

Marsh Posté le 05-02-2006 à 19:48:32    

Ouhla, j'aurai jamais pensé à ca. Merci bien (une fois de plus) :)
 
Sinon, qu'entends tu par "utilises plutot des références" ?

Reply

Marsh Posté le 05-02-2006 à 19:55:33    

référence == contraire au passage par valeur (ou copie)

Reply

Marsh Posté le 05-02-2006 à 19:56:47    

ta methode 'drawCase' attend un argument de type pointeur sur 'Case' sans doute pour eviter la recopie d'un objet Case (dans ce cas passe un pointeur sur 'const Case' si tu ne modifie pas l'objet pointé dans la fonction) mais en C++ tu peux utiliser une reference, l'utilisation est transparente
 

Code :
  1. void View::drawCase(const  Model::Case & c, EasyWindow* _fenetre){// Dessine une Case
  2.        cout<<c.numerocase<<endl;
  3. }


Message édité par skelter le 05-02-2006 à 19:57:13
Reply

Marsh Posté le 05-02-2006 à 20:01:56    

Ok je comprend mieux, merci  :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed