[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   -
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

4 réponses

  1. marvinrouge
     
    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
    0
    1. marvinrouge
       
      oups...

      pardon c'était
      #define __EAU_H__

      et pas
      #defnie __EAU_H__

      marvinrouge
      0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Ok, merci, mais c'est deja fait.
    Donc le problème ne vien pas de la.

    Salutation !
    Char Snipeur
    0
  3. marvinrouge
     
    Ok, on va trouver,

    peux-tu nous poster tous les messages que te sort par le compilateur stp ?

    marvinrouge
    0
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
    0
    1. marvinrouge
       
      oui j'aurais du penser à e dire de vérifier ça

      en Java le pb existe plus (TOUT dans un seul et même fichier .class)

      pour la doc faudrait cherhcer le bouqin "penser en C++" sur google il est en pdf ou htm grtatuit et doit aborderb le sujet je pense,

      marvinrouge
      0
      1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > marvinrouge
         
        Je ne l'ai trouver qu'en anglais... :-[

        Salutation !
        Char Snipeur
        0