Je sais qu'il ne faut pas utiliser de variables globales mais j'en ai besoin. J'ai lu que toute variable déclarée en dehors d'une fonction est une variable globale. Je l'ai fait, mais dans un autre fichier *.cpp, cette variable n'a pas pu être trouvée. Ce n'était donc pas vraiment mondial. N'est-il pas nécessaire de créer un fichier d'en-tête GlobalVariabels.h et d'inclure ce fichier dans tout autre fichier *cpp qui l'utilise ?
Réponses
Trop de publicités?Vous déclarez la variable sous la forme extern
dans un en-tête commun :
//globals.h
extern int x;
Et définissez-le dans un fichier d'implémentation.
//globals.cpp
int x = 1337;
Vous pouvez ensuite inclure l'en-tête partout où vous avez besoin d'y accéder.
Je vous suggère également d'envelopper la variable dans un namespace
.
En plus des autres réponses ici, si la valeur est une constante intégrale, une énumération publique dans une classe ou une structure fonctionnera. Une variable - constante ou autre - à la racine d'un espace de noms est une autre option, ou un membre public statique d'une classe ou d'une structure est une troisième option.
MyClass::eSomeConst (enum)
MyNamespace::nSomeValue
MyStruct::nSomeValue (static)
Je ne sais pas si cela est correct dans un sens, mais cela semble fonctionner pour moi.
someHeader.h
inline int someVar;
Je n'ai pas de problèmes de liaison/définition multiple et ça "fonctionne juste"... ;- )
C'est assez pratique pour des tests "rapides"... Essayez d'éviter les vars globales, car tout le monde le dit... ;- )