Bonjour,
j'ai un petit soucis avec des variables static et je voudrais bien quelque complément d'info car mes recherches n'aboutissent pas.
J'ai une solution sous visual C++ qui contient un projet (.exe) et deux projets (.lib).
Dans le projet CoucheBasse.lib, j'ai un fichier .h ou je stocke des paramètres de calcul dans un fichier param.h.
Toutes les variables de param.h sont déclarer comme ceci :
Dans mon projet CoucheHaute.lib, j'ai un fichier Init.cpp qui initialise certain paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part static double testStatic = 8;
Ce bout de code me retourne bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::cout << "Valeur avant init "<< testStatic <<std::endl; testStatic = 123; std::cout << "Valuer apres init "<< testStatic <<std::endl;
J'utilise ensuite ma variable static dans le code de CoucheBasse.lib et la surprise, je ne retrouve pas ma variable à la valeur à laquelle je l'ai initialisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Valeur avant init 8 Valeur apres init 123
Ce bout de code me retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::cout << "Valeur avant init "<< testStatic <<std::endl; testStatic++; std::cout << "Valuer apres init "<< testStatic <<std::endl;
Alors que le résultat attendu est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Valeur avant init 8 Valeur apres init 9
Je croit comprendre que chaque lib fait une instance de la variable static testStatic. Mes recherches sur le net semble le confirmer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Valeur avant init 123 Valeur apres init 124
Question : comment faire pour assurer de travailler sur une seule et même instance de testStatic dans les différents .lib ?Je sais que lorsqu'on a plusieurs projets qui lient avec une même bibliothèque statique ils ont chacun leurs instances des variables statiques
J'ai tenté de jouer avec le mots clé EXTERN mais le résultat est inchangé.
Merci à vous.
Partager