juju0169
Messages postés15Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention28 avril 2008
-
8 mai 2005 à 15:18
juju0169
Messages postés15Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention28 avril 2008
-
11 mai 2005 à 14:02
Bonjour a tous!
J'ai encore un ptit probleme. Voila je m'explique.
J'ai creer un project avec :
Fichier_principal.cpp,
Fichier_secondaire1.cpp,
Fichier_secondaire2.cpp
et un fichier.h (ou je mets toutes les declarations des fonctions qu'elles soient pour le Fichier_principal.cpp, ou les deux autres).
Juste qu'a aujourd'hui je mettais en haut des 3 .cpp #include "fichier.h"
et ca marche mais mon probleme c'est qu'alors visual me dis que tous ce qui se trouve dans le .h a deja été defini
(warning LNK4006: int XXXX already defined ) et donc j'ai plein de warning.
je comprends bien que de mettre plusieur fois #include "fichier.h"
visual se retrouve 3 fois avec les memes declarations.
AlphaLyrae
Messages postés6Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention 3 février 2006 8 mai 2005 à 16:24
Il faut utiliser "extern" :
Tu déclares ta variable comme ca dans fichier.h :
extern int prout;
pour dire que c'est une variable qui sera accessible à tout le monde
et tu la declares réellement une fois dans un des fichiers cpp
int prout;
Tu fais ca pour chaque variable et ca devrait bien tourner.
PS : surtout pas de merci à l'aide de visual C++ sur extern parce que à l'époque j'avais bien galéré à comprendre comment ca marche
juju0169
Messages postés15Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention28 avril 2008 8 mai 2005 à 18:09
Attendez si j'ai bien compris
dans mon fichier.h
je met extern devant toutes mes variables, mes declarations de fonctions et mes structures (mais il me semble que devant struct on ne peut pas mettre extern (a voir))
puis apres j'ai un doute
je dois mettre #include "fichier.h" dans les trois fichiers .cpp
ou juste dans un seul???
et puis quand je veux me servir d'une variable globale definie dans mon fichier.h (exemple extern int nombre=0) je met int nombre ???
merci de pour vos reponses car 32 warning ca fait pas tres propre
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 20081 8 mai 2005 à 18:13
Moi je n'utilise pas extern et je peux inclure mes headers dans chacuns
de mes fichiers .cpp sans générer aucun warning... je pense qu'il est
plus facile de rajouter 3 lignes de code dans ton fichier .h plutot que
de rajouter extern devant chaque déclaration. Mais c'est à toi de voir
;)
____________________
**Rouliann** Life is short, program more!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 8 mai 2005 à 20:55
Bonsoir,
Je pense qu'il est déconseillé de mettre des variables dans des fichiers .h
D'abord, j'opte pour un .cpp il faut un .h donc pour toi, 3 .cpp = 3 .h
car comme ca tes fonctions sont réutilisables et pour des gros projets,
si tu changes un prototype, tu ne recompile pas tout tes fichiers.
Puis faire comme Rouliann a dit pour eviter les inclusions multiples.
#ifndef TOTO_H
#define TOTO_H
// ici tes prototypes de fonctions
#endif
enfin, si tu as des variables globales à plusieurs fichiers, dans le
fichier principal (ou un autre), tu la declares normalement et tu
l'initialises : int g_ntoto = 0;
puis dans les fichiers ou tu t'en sers tu met int g_ntoto;
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 10 mai 2005 à 09:36
voici ce que tu peux mettre dans les .h :
- les déclarations de structures, classes, typedef, enum.
- les #define
- les prototypes de fonctions (ou déclaration).
voici ce qu'il ne faut pas mettre :
- les implémentations des fonctions (le code).
- les déclarations de variables (sauf celles avec extern).
mettre #ifdef/#define/#endif dans un .h évite que celui-ci soit inclu plusieurs fois lors de la compilation d'UN fichier source. Si plusieur fichiers sources incluent le .h il sera inclu une seule fois par chaque mais au final il y aura plusieurs fois le contenu des fichiers .h dans le code généré. C'est pour cela qu'il ne doit pas y avoir de code dans les .h.
En ce qui concerne les variables. Elles ne doivent apparaître en tant que variable globale UNE seule fois dans tout le projet et donc il ne faut pas les mettre dans les .h (la variable se trouverait dupliquée x fois). Pour pouvoir utiliser la variable dans des fichiers sources séparés, UN doit avoir la déclaration (et son init éventuelle) et les AUTRES la même chose (sans l'init) avec extern.
Pour éviter d'avoir à déclarer extern toutes les var globales dans les fichiers sources il est possible de mettre la déclaration avec extern dans le .h.