Problème de class et d'attribut

Problème de class et d'attribut - C++ - Programmation

Marsh Posté le 04-11-2007 à 17:15:14    

Bonjour,
Je sais que mon titre de sujet n'est pas terrible mais bon, l'important c'est que tout soit bien compris ici  :)  
En faite j'ai un problème de transmission de variable entre class. Je veux récupérer une variable appartenant à une class dans une autre.
Jusqu'ici aucun problème, sauf que je ne récupère que la valeur initialisé dans le constructeur, quand ma variable est modifié dans une méthode, je ne récupère pas cette valeur dans le l'autre class !  
Du code sera peut-etre plus parlant :
 

Code :
  1. /* Fichie .h */
  2. /* Class PersoG hérite de la class player */
  3. class C_PersoG : public C_Player
  4. {
  5.     private:
  6.     public:
  7.         C_PersoG();
  8.         ~C_PersoG();
  9.         void Commandes(Uint8 * keys);
  10.         /* + int arme de la class mère */
  11. };
  12. /* Fichier .cpp */
  13. C_PersoG::C_PersoG()
  14. {
  15.     arme = 1;
  16. }
  17. /* Si on press 2 l'arme vaut 2 */
  18. void C_PersoG::Commandes(Uint8 * keys)
  19. {
  20.     if(keys[SDLK_2])
  21.     {
  22.         arme = 2;
  23.     }
  24. }
  25. /*  --------------------------------------------------------------- */
  26. /* Fichier .h */
  27. class C_BoardG : public C_Board
  28. {
  29.     private:
  30.         C_PersoG PersoG;
  31.     public:
  32.         C_BoardG();
  33.         ~C_BoardG();
  34.         void RecupereArme();
  35.         /* int Arme de la class mère */
  36. };
  37. /* Fichier .cpp */
  38. /* On récupère la valeur de l'arme */
  39. void C_BoardG::RecupereArme()
  40. {
  41.     Arme = PersoG.arme;
  42. }
  43. /* + Main */
  44. /* Problème seul la valeur de l'arme initialisé dans le constructeur est renvoyé, quand
  45. la touche 2 est pressé la valeur 2 n'est pas renvoyé */


 
J'ai aussi essayé avec des returns mais j'ai le même problème.
 
 
Merci d'avance.
A++

Reply

Marsh Posté le 04-11-2007 à 17:15:14   

Reply

Marsh Posté le 04-11-2007 à 17:33:09    

oh, des nombres magiques !!
 
 
 
bon, ca mis de coté, tu l'appelles comment la méthode "Commandes" ?

Reply

Marsh Posté le 04-11-2007 à 17:34:09    

et je parie que tu confonds class et objet

Reply

Marsh Posté le 04-11-2007 à 17:38:14    

Comment je l'appelle ? eh ben comme ça (dans le main) :

Code :
  1. PersoG->Commandes(keys);


 
Mhh peut etre, je suis entrain de lire mon bouquin sur le c++ donc je connais pas tous hein ^^


Message édité par Yru le 04-11-2007 à 17:38:36
Reply

Marsh Posté le 04-11-2007 à 17:39:33    

Mhh ah ouais je crée...  
    C_BoardG *BoardG;
    BoardG = new C_BoardG();
C'est ca non ?

Reply

Marsh Posté le 04-11-2007 à 17:44:51    

M'est avis que tu ne rentres pas dans void C_PersoG::Commandes(Uint8 * keys).
Il est comment ton gestionnaire d'événements?

Reply

Marsh Posté le 04-11-2007 à 17:51:37    

Si si j'y rentres, j'ai testé avec un SDL_Quit quand ca passe dans le if(keys[SDLK_2]) et le prog se ferme.

Reply

Marsh Posté le 05-11-2007 à 09:29:34    

Quelqu'un sait où est le problème ?

Reply

Marsh Posté le 05-11-2007 à 10:10:30    

ligne 42 obv. :o

 

blague à part ...

 

pour récupérer les valeurs d'un membre d'une instance d'une classe, on utilise des accesseurs aka des méthodes d'instance qui renvoie le valeur d'un member.

 
Code :
  1. class A
  2. {
  3.   public:
  4.   A(int i=0) :val(i) {}
  5.   ~A() {}
  6.   int getVal() const { return val; }
  7.   private :
  8.   int val;
  9. };
  10. class B
  11. {
  12.   B() {}
  13. ~B() {}
  14.   void doSmthgWith( const A& a )
  15.   {
  16.      cout << "Cet instance de A a pour valeur " << a.getVAl() << endl;
  17.   }
  18. };
 

Revise tes fondamentaux, c'ets pas clair dans ta tête


Message édité par Joel F le 05-11-2007 à 10:11:44
Reply

Marsh Posté le 05-11-2007 à 11:35:18    

pourquoi t'appelle tout C_ ?

Reply

Marsh Posté le 05-11-2007 à 11:35:18   

Reply

Marsh Posté le 05-11-2007 à 13:08:49    

Ok merci je vais regarder ça !

Reply

Sujets relatifs:

Leave a Replay

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