Compilation de fichier ; GROS PB POUR MON STAGE !!

loulou -  
 char snipeur -
J'ai déclaré des variables globales dans le fichier .h de mon projet, et le compilateur sort l'erreur suivante :
"error LNK2005: _AdrBuff already defined in main.obj", (AdrBuff est ma variable global).
Le fichier .h est inclu dans le main.c, et bizarement je suis obligé de l'inclure dans ma fonction pour que mon programme fonctionne.
De quoi peut provenir cette erreur ?
Il semble que la porté de ma variable ne soit pas réèllement global, ou que sa déclaration soit redondante du fait que le .h soit inclu dans le main et dans la fonction.
Merci.
A voir également:

9 réponses

batmat Messages postés 1871 Statut Membre 114
 
Tu viens de donner le pb...
Ca n'a rien de bizarre : c'est comme si tu définissais plusieurs fois la meme fonction...

Plusieurs solutions à ton pb :
1) c'est une constante, rajoute alors simplement static devant et ça va marcher. Seulement après ATTENTION ce ne sera pas la meme variable partout (j'ai un léger doute à ce sujet, j'essaie de vérifier ce soir)
2) tu ne la déclares pas dans le .h, mais dans le main par exemple et dans tous les modules .c où tu veux utiliser CETTE variable tu fais un copier-coller de la déclaration en haut du prog et tu rajoute extern devant...

Voilà, ça devrait aller
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
loulou
 
J'ai fais la modif 2) avant de mettre mon message, et je l'ai recommencée...mais le problème demeure !!!
0
loulou
 
Si tu veux je peut t'envoyer mes fichiers, mais il me faut ton e-mail.
0
batmat Messages postés 1871 Statut Membre 114
 
dépose tes sources là :
www.softcrypt.fr.st
@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
batmat Messages postés 1871 Statut Membre 114
 
Je suis en train de jeter un coup d'oeil :

//VARIABLES GLOBALES
char NumMag[10], AdrBuff[][200] = {"","","",""}, *Argu[];
int NbArgc;
//int argc;


Ca c'est dans ton .h, et ça ne peut pas y être tel quel, parce que sinon les MEMES variables vont être définies plusieurs dans plusieurs modules objets différents => ça passe à la compil, ça casse au linkage où le linker va te dire qu'un symbole est défini dans plusieurs endroits...

Donc je me répète :
Comme il semble que tu veuilles utiliser ces variables au cours de l'éxécution (ptit rappel qd même : les variables sont à éviter au maximum)...

Tu vas donc me déplacer ces lignes dans le main.c (ou dans n'importe lequel de tes modules d'ailleurs...), et partout ailleurs où tu voudras les utiliser, ton compilo aura besoin de connaitre la déclaration de tes variables, tu écriras :

//VARIABLES GLOBALES
extern char NumMag[10];
extern char AdrBuff[][200] = {"","","",""}, *Argu[];
extern int NbArgc;
//int argc;


Comme ça, la compil passera et le linker comprendra que ces variables sont définies ailleurs. Tu pourras d'ailleurs vérifier que si tu commentes les définitions et que tu ne laisses que les déclarations (extern), le linlker génèrera une erreur...

J'espère avoir été clair...
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
batmat Messages postés 1871 Statut Membre 114
 
linker pas linlker ;-p
@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
pouet
 
editeur de lien, pas linker ;)

--
pouet
0
batmat Messages postés 1871 Statut Membre 114
 
T'es un peu chiant, non ? :-)
Tu as traqué les conneries que je pouvais dire et comme tu n'as rien trouvé d'autre, c ça ? ;-)

@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
pouet
 
non.
non.
non.
il se trouve que tu as contribue a la plupart des posts qui m interessent.
pas de chance ?

--
pouet
0
batmat Messages postés 1871 Statut Membre 114
 
C kon doit s'interesser aux memes sujets ;)
@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
char snipeur
 
tu peu aussi faire un
#ifndef _Nom-du-.h
#define _Nom-du-.h
// le corps de ton .h
#endif
Comme ça tu "retape" pas 2 fois la meme chose
0