68 votes

Comment déclarer une variable globale en C++

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 ?

67voto

Luchian Grigore Points 136646

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 .

4voto

JTeagle Points 1747

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) 

-1voto

Dariusz Points 129

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... ;- )

-1voto

fizzbuzz Points 125

Déclarez extern int x; dans le fichier.h. Et définissez int x; uniquement dans un fichier cpp.cpp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X