declaration de class imcomprehensible [résolu]

declaration de class imcomprehensible [résolu] - C++ - Programmation

Marsh Posté le 19-03-2015 à 17:28:22    

Hummm... je sais vraimant pas comme l'expliquer celle là :
 
 

Code :
  1. #include <iostream>
  2. #include "B"
  3. class A; // sachant que ces class sont correctement construitent ailleurs,  
  4. class C; // mais je ne comprends pas ces lignes ? a quoi sertce genre de déclaration ?  
  5. class D; // cela remplace-t-il les includes ?
  6. class E; //
  7. class MaClass
  8. {
  9. private:
  10.   int m_var;
  11. public:
  12.   MaClass() : m_var(0)
  13.   {
  14.   }
  15.   ~MaClass() {}
  16.    void setVar(A* a)
  17.    {
  18.       m_var = a->getVarInt();  // pourquoi " a  " ne semble-t-il pas pris en compte par le compilo (cf plus bas.).
  19.    }
  20. };


 
Le compilo rejette le tout en indiquant que l’opérande a gauche de -> doit être de type class/struct/union/generic : error C2227: left of '->getVarInt' must point to class/struct/union/generic type  :??:


Message édité par bqron le 19-03-2015 à 19:19:53
Reply

Marsh Posté le 19-03-2015 à 17:28:22   

Reply

Marsh Posté le 19-03-2015 à 17:45:20    

C'est une forward declaration, ça veut juste dire que "A" est une classe.
Ca permet d'avoir des pointeurs ou référence sur A, vu que ces qualifiers ne demandent pas à connaitre la nature entière du type.
 
Par contre, si tu fais a->method( ... ), là il te faut la déclaration complete.
 
Faudrait que tu câble ça comme ça :  
 

Code :
  1. class A;
  2. class MaClass
  3. {
  4.     private:
  5.         int m_var;
  6.     public:
  7.         void setVar(A* a);
  8. };
  9. // Dans un autre fichier hpp ou à la suite :
  10. class A
  11. {
  12.     public: int getVarInt();
  13. };
  14. // Dans un autre fichier cpp ou à la suite :
  15. int A::getVarInt()
  16. { /*...*/ }
  17. // dans un autre fichier cpp ou à l asuite (il doit include le fichier qui contient la déclaration de A si celle-ci est dans un autre fichier):
  18. void MaClass::setVar(A* a)
  19. {
  20.     m_var = a->getVarInt();
  21. }


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 19-03-2015 à 19:19:13    

Merci, ça m'as aider a y voir plus clair.

Reply

Sujets relatifs:

Leave a Replay

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