[C++] redefinition lors du linkage
Char Snipeur
Messages postés
10112
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai créér un fichier eau.h dans lequel j'ai des fonctions.
ensuite, je crée un programme avec deux .c
dans ces deux .c j'inclu eau.h, je compile pour avoir les .o, tout se passe bien.
par contre lorsque je lie l'ensemble des .o ensemble, le compilateur me dit que je redefini mes fonction de eau.h !
je ne comprend pas pourquoi.
***fichier principal.c
#include "eau.h"
#include "structure.h"
main(){...}
****fichier structure.c
#include "eau.h"
#include "structure.h"
void structure::f(){...}
si je rajoute '#include <math.h> ' dans les deux .C je n'obtient pas d'erreur de compilation.
est-ce que quelq'un connaitrait cette ereur?
Salutation !
Char Snipeur
j'ai créér un fichier eau.h dans lequel j'ai des fonctions.
ensuite, je crée un programme avec deux .c
dans ces deux .c j'inclu eau.h, je compile pour avoir les .o, tout se passe bien.
par contre lorsque je lie l'ensemble des .o ensemble, le compilateur me dit que je redefini mes fonction de eau.h !
je ne comprend pas pourquoi.
***fichier principal.c
#include "eau.h"
#include "structure.h"
main(){...}
****fichier structure.c
#include "eau.h"
#include "structure.h"
void structure::f(){...}
si je rajoute '#include <math.h> ' dans les deux .C je n'obtient pas d'erreur de compilation.
est-ce que quelq'un connaitrait cette ereur?
Salutation !
Char Snipeur
4 réponses
-
if faut que tu rajjoutes ceci au TOUT DEBUT de ton fichier eau.h
#ifndef __EAU_H__
#defnie __EAU_H__
if faut que tu rajjoutes ceci TOUT A LA FIN de ton fichier eau.h
#endif
ça permet d'éviter ton problème quand plusieurs de tes fichiers incluent eau.h -
Ok, merci, mais c'est deja fait.
Donc le problème ne vien pas de la.
Salutation !
Char Snipeur -
Ok, on va trouver,
peux-tu nous poster tous les messages que te sort par le compilateur stp ?
marvinrouge -
Bon en fait, j'ai trouvé.
il me restait des implemetations de fonctions dans le .h, ce qu'il fait qu'elles sont défini deux fois lors du linkage : 1 fois dans le main.c, et une fois dans structure.c
Comme quoi il y a une bonne raison à ce limité à déclarer les fonctions dans le .h, et à implementer dans le .c.
Dommage que ça ne soit pas dit plus clairement...
La compilation : je maitrise (pour ce que j'en fait) par contre, j'ai du mal avec le linkage, et impossible de trouver de la doc la dessus...
Merci marvinrouge
Salutation !
Char Snipeur