[C++] redefinition lors du linkage
Char Snipeur
Messages postés
9813
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 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
#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, on va trouver,
peux-tu nous poster tous les messages que te sort par le compilateur stp ?
marvinrouge
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
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
pardon c'était
#define __EAU_H__
et pas
#defnie __EAU_H__
marvinrouge