En utilisant la même variable dans plusieurs fichiers en C++
Dans le processus de changement d'un code, j'ai versé quelques fonctions en plusieurs fichiers. J'ai les fichiers controls.cpp
et display.cpp
et je voudrais être en mesure d'avoir accès au même ensemble de variables dans les deux fichiers. Je n'ai pas l'esprit où ils sont initialisés ou déclarées, tant que les fonctions dans les deux fichiers pour pouvoir les utiliser.
Ce n'était pas un problème lorsque les fonctions sont dans le même fichier, mais maintenant, il semble presque impossible après une heure de recherche sur google et essayer différentes choses.
C'est évidemment une très mauvaise pratique, vous devriez revoir votre code, plutôt que de faire cela.
c'est le but pourquoi
Bien sûr, cela pose la question de pourquoi vous avez des variables globales.
Boost::test utilise des variables globales pour garder une trace des cas de test. L'épargne utilise des variables globales pour les constantes. Cependant, dans Sam152 de cas, il ne sembler une mauvaise idée.
Le langage C a le mot clé extern les NOMS visible entre les unités de traduction, pas (à quelques exceptions près) des VARIABLES.
c'est le but pourquoi
extern
mot-clé est présent dans cBien sûr, cela pose la question de pourquoi vous avez des variables globales.
Boost::test utilise des variables globales pour garder une trace des cas de test. L'épargne utilise des variables globales pour les constantes. Cependant, dans Sam152 de cas, il ne sembler une mauvaise idée.
Le langage C a le mot clé extern les NOMS visible entre les unités de traduction, pas (à quelques exceptions près) des VARIABLES.
OriginalL'auteur Sam152 | 2010-03-30
Vous devez vous connecter pour publier un commentaire.
Définir la variable dans un fichier, comme:
Et de déclarer à l'échelle mondiale dans l'autre fichier comme:
extern type var_name
dans un en-tête et de les inclure dans tous les autres fichiers, au lieu de mettre de la déclaration dans leur manuellement.OriginalL'auteur codaddict
l'utilisation de ces variables comme
extern
c'est à dire
dans un autre fichier de déclarer la même que la normale de la variable globale...
OriginalL'auteur mihir mehta
Créer deux nouveaux fichiers:
Globals.h
et de déclarer toutes les variables comme:extern type name;
Globals.cpp
et déclarer des variables comme:type name;
Puis ajouter
#include "Globals.h"
en haut de:Globals.cpp
controls.cpp
display.cpp
Vous pouvez ensuite certaines fonctions de l'initialiser.
Oui, je suggère la création d'une fonction qui vit dans
Globals.cpp
et les déclarer dansGlobals.h
Voir ma réponse ci-dessous pour un truc qui vous permet de déclarer et d'initialiser les variables de tous les dans le .h fichier.
OriginalL'auteur quamrana
Essentiellement tout ce que vous avez à faire est de déclarer la variable une fois dans un fichier de code, et de le déclarer dans les autres comme extern (assurez-vous de ne PAS initialiser lorsque vous déclarez il extern, ou certains compilateurs ignorer le mot-clé extern, vous donnant des erreurs du compilateur.)
La façon la plus simple pour ce faire est d'utiliser une macro dans un fichier d'en-tête, comme tel:
et ensuite déclarer vos variables dans le même fichier d'en-tête, comme tel:
de tout UN fichier dans le projet, inclure le fichier d'en-tête, comme tel:
de tout le reste, il suffit de l'inclure normalement, comme tel:
Presto, vous avez terminé. Seulement les Variables déclarées une fois, et initialisé en ligne. C'est très facile à gérer, et vous évite d'avoir à déclarer tout deux fois.
OriginalL'auteur BrainSlugs83
Toutes les déclarations que vous désirez voir dans plusieurs unités de compilation (.fichiers cpp), il devrait aller dans un fichier d'en-tête que vous incluez dans tous les endroits qui ont besoin d'utiliser la variable, type, classe, etc.
C'est infiniment mieux que extern, qui, essentiellement, cache votre intention de partager la déclaration.
Redeclaration et "extern" sont totalement orthogonale de questions. Je devrais avoir mentionné que chaque en-tête que vous écrivez doit avoir "comprennent des gardes" autour de son contenu: #ifndef UNIQUE_NAME_OF_HEADER_FILE_HPP #define UNIQUE_NAME_OF_HEADER_FILE_HPP ... déclarations ... #endif Ou si votre compilateur prend en charge #pragma fois
OriginalL'auteur simong