Redeclaration de variables [Résolu]

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonjour,

J'ai un petit souci : Mon projet utilise 2 fichiers sources *.cpp, et un fichier entete *.h qui contient toutes les variables communes aux 2 fichiers cpp (donc le fichier h est inclus dans les 2 fichiers sources.). Mais au moment du 'linkage', je recois ca :

8Card error LNK2005: _iSelCard déjà défini(e) dans main.obj
...
8Card fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés

Dans mon .h, j'ai fait attention a bien mettre :

#ifndef _GLOBAL_H
#define _GLOBAL_H
...
#endif

Voila, si quelqu'un a une solution ;)
Merci d'avance.

+2(p - n)

8 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
le fait de mettre un .h entre #ifdef/#endif évite l'inclusion multiple pour la compilation d'un fichier source pris séparement. comme tu as 2 fichiers sources, il inclueront tous les 2 une seule fois le .h et donc à l'édition de lien, les varaibles sont en double.

=> ne pas mettre les variables globales dans les .h ou alors rajouter extern. Un des fichiers sources doit avoir la déclaration standard et les autres celle avec extern.
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
évite les variables globales !!!!

si tu peux vraiement pas faire autrement

joue avec des extern dans ton header
++

Magic Nono: l'informagicien!
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Bon bah ok, ca me semblait plus 'propre' de faire un .h, mais non, merci a vous 2 ;)
magic_Nono > Je ne peux pas faire autrement...

+2(p - n)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Avec des extern, j'ai les mêmes erreurs, et je viens de m'apercevoir que pas toutes les variables 'redeclarées' a l'aide de extern sont dites 'Deja definies.'. Donc il y a une couille quelque part.

+2(p - n)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Personne n'a une idée ? Parce que la ca me semble bizarre quand meme.

+2(p - n)
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut,

si dans un .cpp tu déclares extern int i; et dans l'autre tu déclares
int i; a priori il n'y aura pas d'erreurs. copie colle ton code et tes
erreurs si tu t'en sors pas.



a++
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
exemple :

main.cpp :

#include "variables.h"

int var;

int main()
{
}

_____________________
variables.h

#ifndef variables
#define variables

extern int var;

#endif
______________________
source.cpp

#include "variables.h"

...

ca marche chez moi
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
J'ai trouvé, je faisais un copier coller des variables globales, et il y avait toujours les initialisations de ces mm variables, ce qui explique l'erreur..Merci quand meme ;)

+2(p - n)