Le membre statique a des valeurs différentes

Mise à jour : Je pense avoir été en mesure de réduire le problème. Voir ici une nouvelle question qui, espérons-le, sera plus précise.

Mise à jour 2 : J’ai pu résoudre le problème, voir le lien ci-dessus 🙂

J’essaie de comprendre si j’ai quelque chose de fondamentalement confus sur le fonctionnement des variables membres statiques.

J’ai une classe (appelons-la cProvider) qui contient des variables membres statiques (par exemple un pointeur) et des méthodes get / set. Cette classe est incluse par deux autres classes, appelons-les “cWriter” et “cReader”, et les deux l’instancient. cWriter n’accède qu’aux méthodes de définition, cReader accède aux méthodes de lecture.

Mon problème est qu’il semble y avoir plusieurs instances des variables statiques, ce qui signifie que lorsque j’accède à une variable statique de cProvider via cWriter, il accède à un emplacement physique différent de celui où j’accède à la même variable via cReader.

Est-ce quelque chose auquel il faut s’attendre? Je le fais dans un cadre plutôt complexe et probablement inconnu, ADTF. Il se pourrait bien que le framework soit responsable de ce comportement. J’ai vérifié les ID de processus et cWriter et cReader ont le même ID de processus.

Quelle pourrait être la raison pour laquelle ils ont toujours access à des adresses différentes? Je n’ai jamais suivi de formation en programmation. Il se peut donc que je manque quelque chose de fondamental sur le fonctionnement des variables statiques. Je suis heureux pour toute indication sur ce qui pourrait être le problème!

Edit: Version condensée de mon code: (pour montrer l’essentiel)

OdometryHistoryWriter.h:

class cOdometryHistoryWriter { static bool something; } 

OdometryHistoryWriter.cpp:

 bool cOdometryHistoryWriter::something; 

OdometryHistoryProviderInputFilter.h:

 #include OdometryHistoryWriter.h class cOdometryHistoryProviderInputFilter { cOdometryHistoryWriter m_odoHistWriter; void setSomething(boolvar); } 

OdometryHistoryProviderInputFilter.cpp:

 #include OdometryHistoryProviderInputFilter.h void OdometryHistoryProviderInputFilter::setSomething(boolvar) { m_odoHistWriter.something = boolvar; return; } 

OdometryHistoryProvider.h:

 class cOdometryHistoryProvider { bool getSomething(); cOdometryHistoryWriter m_odoHistAcessor; } 

OdometryHistoryProvider.cpp:

 bool cOdometryHistoryProvider::getSomething() { return m_odoHistAcessor.something;} 

Ce n’est pas vraiment une réponse, mais c’est beaucoup trop long pour faire un commentaire, et le code dans les commentaires est impossible à lire, même si ça convient [à moins que ce soit très court]

Je viens de faire cela en fonction de votre code:

 #include  class cOdometryHistoryWriter { public: static bool something; }; bool cOdometryHistoryWriter::something = false; class cOdometryHistoryProviderInputFilter { public: cOdometryHistoryWriter m_odoHistWriter; void setSomething(bool b) { m_odoHistWriter.something = b; } }; class cOdometryHistoryProvider { public: bool getSomething() { return m_odoHistAcessor.something; } cOdometryHistoryWriter m_odoHistAcessor; }; int main() { cOdometryHistoryProvider a; cOdometryHistoryProviderInputFilter b; b.setSomething(true); std::cout << "Expect true:" << a.getSomething() << std::endl; b.setSomething(false); std::cout << "Expect False:" << a.getSomething() << std::endl; } 

et il produit:

 Expect true:1 Expect False:0 

comme on peut s'y attendre (du moins je le fais).

Tant que vous n'avez qu'une seule définition de bool cOdometryHistoryWriter::something = false; , il ne devrait avoir qu’une seule adresse et être accessible partout de la même manière. Si cela ne se produit pas, il y a QUELQUE CHOSE de différence entre votre code ACTUAL et le code que vous avez publié (ce qui n’est pas inhabituel, je suppose que plus de la moitié des questions que je regarde manquent "du code qui fait en sorte qu’il tourne mal" de "pas de code posté"])