[Résolu] Accès à une variable statique

Accès à une variable statique [Résolu] - C++ - Programmation

Marsh Posté le 08-01-2007 à 15:10:16    

Salut,
 
Je comprends pas bien ce qui m'arrive : j'ai une variable statique définie dans une classe que je ne peux pas modifier. J'ai également une classe censée faire des opérations sur cette variable, ainsi qu'un programme qui doit aussi y accéder. Simplifiées au maximum, les choses se passent en gros comme ça :
 
- une classe non modifiable truc.h :

Code :
  1. #ifndef TRUC
  2. #define TRUC
  3. static int z;
  4. #endif


- ma classe essai.h :

Code :
  1. #ifndef ESSAI
  2. #define ESSAI
  3. #include "truc.h"
  4. #include <iostream>
  5. using namespace std;
  6. class essai
  7. {
  8. public:
  9.  essai(){};
  10.  void ecrit(){ cout<<z<<endl;;
  11. };
  12. #endif


- un programme principal test.C :

Code :
  1. #include "essai.h"
  2. int main()
  3. {
  4. essai H;
  5.  z=5;
  6. cout<<z<<endl;
  7. H.ecrit();
  8. cout<<z<<endl;
  9. return 0;
  10. }


Le résultat de ce programme est :

Citation :

5
0
5


D'où mon incompréhension : pourquoi ma classe essai n'a-t-elle pas accès au même contenu de z que le programme test ? Il y aurait deux objets z ??? Et si je déplace le z=5 dans le constructeur de la classe essai, le résultat est exactement le même :

Citation :

5
0
5


Quelqu'un peut m'expliquer, parce que là ça me fout dans la merde...  :sweat:  
 
Merci.
 
PS : Tiens, y'a pu de couleur dans les codes ?  :??:


Message édité par SkippyleGrandGourou le 08-01-2007 à 16:57:36
Reply

Marsh Posté le 08-01-2007 à 15:10:16   

Reply

Marsh Posté le 08-01-2007 à 15:20:16    

Il est horrible ton truc.h, les variables globales, au secours quoi.
 
Met ton z en statique de classe , ca devrait déjà mieux aller.

Reply

Marsh Posté le 08-01-2007 à 15:26:42    

_darkalt3_ a écrit :

Il est horrible ton truc.h, les variables globales, au secours quoi.
Met ton z en statique de classe , ca devrait déjà mieux aller.

Euh... Comme j'ai dit, je peux pas modifier le truc.h...  :sarcastic:  
 

Reply

Marsh Posté le 08-01-2007 à 15:47:23    

normal, ton z est static, donc privé à chaque unité de compilation.

Reply

Marsh Posté le 08-01-2007 à 16:46:09    

Bon, j'ai réussi à contourner le problème en pointant sur la variable statique initialisée :
 
- une classe non modifiable truc.h :

Code :
  1. #ifndef TRUC
  2. #define TRUC
  3. static int z;
  4. #endif


- ma classe essai.h :

Code :
  1. #ifndef ESSAI
  2. #define ESSAI
  3. #include "truc.h"
  4. #include <iostream>
  5. using namespace std;
  6. class essai
  7. {
  8. public:
  9.          int *u;
  10.  essai(int *d){ u=d; };
  11.  void ecrit(){ cout<<*u<<endl; };
  12. };
  13. #endif


- un programme principal test.C :

Code :
  1. #include "essai.h"
  2. int main()
  3. {
  4.     z=5;
  5. essai H(&z);
  6. cout<<z<<endl;
  7. H.ecrit();
  8.     ++z;
  9. cout<<z<<endl;
  10. H.ecrit();
  11. return 0;
  12. }


Le résultat donne bien :

Citation :

5
5
6
6


Espérons que ça marche aussi dans la vraie vie...  :whistle:

Message cité 1 fois
Message édité par SkippyleGrandGourou le 08-01-2007 à 16:53:13
Reply

Marsh Posté le 08-01-2007 à 16:57:04    

SkippyleGrandGourou a écrit :

Espérons que ça marche aussi dans la vraie vie...  :whistle:

Ça a l'air ok.  :sol:  
 

Reply

Marsh Posté le 12-01-2007 à 11:31:43    

t'as rien compris. voir mon message précédent. Il n'y a aucun problème, juste une incompréhension de ta part. Et ton contournement ne contourne rien et donne le même problème : un z par unité de compilation.

Reply

Sujets relatifs:

Leave a Replay

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