initialisation static - C++ - Programmation
Marsh Posté le 21-09-2010 à 13:30:57
Peut être par ce que "static" signifie statique ! (Si tu veux modifier ta valeur, enlève le mot clef "static" )
Marsh Posté le 21-09-2010 à 13:37:33
roondar a écrit : Peut être par ce que "static" signifie statique ! (Si tu veux modifier ta valeur, enlève le mot clef "static" ) |
Absolument pas . Static ça signifie que l'emplacement mémoire alloué à cette variable sera toujours le même.
Exemple :
Code :
|
Tu confonds static et const roondar.
in_your_phion, tu peux nous dire dans quel fichier la variable est déclarée, dans quel fichier elle est modifiée et dans quel fichier tu y accèdes, et comment ils sont liés entre eux?
Marsh Posté le 21-09-2010 à 13:41:16
Attention static a deux sens en C/Cpp et dans ce cas là, il signifie que le scope de la variable est limité à l'entité compilée (le fichier en gros).
Si tu l'initialise dans le header, tu auras une variable par entité, et donc si tu en modifie une, l'autre, inclue dans l'autre fichier ne bouge pas.
Marsh Posté le 21-09-2010 à 13:51:11
Citation : Absolument pas . Static ça signifie que l'emplacement mémoire alloué à cette variable sera toujours le même. |
Mea cupla
Marsh Posté le 21-09-2010 à 13:59:30
h3bus a écrit : Attention static a deux sens en C/Cpp et dans ce cas là, il signifie que le scope de la variable est limité à l'entité compilée (le fichier en gros). |
voilà, donc tu crées une nouvelle variable à chaque inclusion du .h
ce qu'il faut faire c'est:
extern int doLog // dans le .h
int doLog // dans un .cpp
Marsh Posté le 21-09-2010 à 14:07:59
h3bus a écrit : Attention static a deux sens en C/Cpp |
Le mot cle static est utilisable dans trois contextes:
static a portee de fichier -> +- la meme chose que de mettre dans un namespace anonyme (meme s'il y a des differences techniques qui font que l'usage de static n'est pas redondant avec un namespace anonyme), visible uniquement que pour le fichier
static a portee de classe -> un exemplaire du membre pour la classe (pour les membres donnees), appelable sans objet (pour les membres fonctions)
static a portee de fonction -> garde sa valeur d'un appel a l'autre de la fonction
Dans le namespace l'OP est dans le premier cas.
Marsh Posté le 21-09-2010 à 15:12:24
sligor a écrit : |
yea! merci c'est exactement ça! j'ai viré le statique et mis du extern.
peut on faire un extern const ? et si oui comment initialiser
cheers
Marsh Posté le 21-09-2010 à 15:31:06
in_your_phion a écrit : |
explicite ce que tu veux faire avec ce extern const , ça a un rapport avec le code précédent ?
Marsh Posté le 21-09-2010 à 15:37:35
in_your_phion a écrit : |
tu initialises à l'initialisation (le CPP qui contient effectivement la variable) et non pas à la déclaration (les extern). Que ce soit const ou pas, l'initialisation ne change pas.
Marsh Posté le 21-09-2010 à 17:19:30
un logger c'est typiquement le cas où on peux utiliser un singleton. (sinon c'est à éviter le plus possible bien sûr)
Sauf que pour utiliser un singleton c'est déjà bien de d'abord comprendre comment fonctionne les bases du langage (static, const, extern ...) ...
Marsh Posté le 21-09-2010 à 22:57:27
sligor a écrit : un logger c'est typiquement le cas où on peux utiliser un singleton. (sinon c'est à éviter le plus possible bien sûr) |
je parlais pas de singleton, je parlais de variable global tt court :€
Marsh Posté le 21-09-2010 à 12:27:16
bonjour,
j'ai un programme où j'initialise une variable statique dans un header:
plus tard, dans mon programme je modifie cette variable à la valeur 'true'.
et encore plus tard, dans un autre fichier, je fais un test sur cette variable
mais bizarrement la valeur est toujours 'false'. Comment c'est possible ?
merci par avance
Message édité par in_your_phion le 21-09-2010 à 12:30:02