[C++] Lecture d'une variable static d'une autre classe??

Lecture d'une variable static d'une autre classe?? [C++] - C++ - Programmation

Marsh Posté le 07-06-2005 à 16:50:36    

Salut
Gros problème, pourtant simple, mais que je n'arrive pas à résoudre:
 
J'ai 2 Classes (dans 2 fichiers differents).
 
Je veux créer un variable static dans une des 2 classes, la modifier dans celle-ci, et la lire dans l'autre.
 
Voilà ce que j'ai écrit:
 
Dans ClassA.h:
...
public:
 static char test;
private:
 ...
...

 
Dans ClassA.cpp

#include "ClassA.h"
 
char ClassA::test;
 
void foo(...){
  ClassA::test=0;
   if....
  ClassA::test=1;
}

Puis, dans ClassB.h
 

#include "ClassA.h"
 
char ClassA::test;
...
//pourquoi dois-je le mettre la, et pas dans la rubrique private: ?
 
Et enfin, dans ClassB.cpp
#include "ClassB.h"
 
void bar(...){
  char val=ClassA::test;
}

 
Pourtant, malchance, cela ne marche jamais, la valeur n'est jamais modifiee et reste toujours a zero.
pourquoi?
D'avance merci


Message édité par korben le 07-06-2005 à 18:14:00
Reply

Marsh Posté le 07-06-2005 à 16:50:36   

Reply

Marsh Posté le 07-06-2005 à 16:52:07    

Il faut pas une méthode static pour modifier une variable static?
Simple question.....


---------------
!== Force et honneur ==!
Reply

Marsh Posté le 07-06-2005 à 17:01:02    

cesarr89 : non
 
Sinon je ne comprend déjà pas pourquoi ça compile, peut-être devrais-tu aussi donner un peu plus de code (au moins rajouter un main où tu lancerais tes fonctions et montrer du code compilable si possible).

Reply

Marsh Posté le 07-06-2005 à 17:01:45    

Tarabiscote a écrit :

cesarr89 : non
 
Sinon je ne comprend déjà pas pourquoi ça compile, peut-être devrais-tu aussi donner un peu plus de code (au moins rajouter un main où tu lancerais tes fonctions et montrer du code compilable si possible).


 
Ok merci


---------------
!== Force et honneur ==!
Reply

Marsh Posté le 07-06-2005 à 18:17:34    

Euh... c'est difficilement possible, mon code est reelement monstrueux, avec enormement de dependance... En fait, d'apres ce que je sais, je n'aurais pas besoin de reinitialiser la variable dans ma classe B. Il suffirait d'appeler la variable char value=ClassA::test;
 
Sauf que si je fais cela, j'ai alors l'erreur suivante, lors de la compilation (sous Visual Studio 2003 (et impossible de m'en passer))
error LNK2001: unresolved external symbol "public: static char ClassA::test" (?test@ClassA@@2DA)
 
Alors qu'avec la version postee lors de mon premier msg, je n'ai aucune erreur de compilation, mais apparemment, comme je declare test une 2eme fois dans la classB, je me retrouve avec 2 variables ayant chacune une place memoire propre...
 
Si qqn a une idee... je suis TRES interesse. Merc

Reply

Marsh Posté le 07-06-2005 à 18:56:37    

Tu ne le déclares pas une deuxième fois, tu le définis.
Mais normalement lors du linkage il devrait le refuser, à moins qu'ils soit dans des namespaces différents, que le compilateur soit buggé ou que tu sois très fort pour faire du code tordu.
Mais sans voir plus de code, ça me parait difficile d'en dire plus.

Reply

Sujets relatifs:

Leave a Replay

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