Erreur "fonction" is multiply-defined...

Erreur "fonction" is multiply-defined... - C - Programmation

Marsh Posté le 15-11-2005 à 11:16:53    

Voilà, j'ai un fichier C qui marche sans problème, avec include <stdio.h> et "memoire.h".
 
Mais lorsque je sépare ce fichier en plusieurs fichiers j'ai ce problème lors de la compilation (sous Unix, par X-WIN32):
 
{ibaneza} 43 >make partition2Q1.e
gcc -c -ansi -g -I/Public/INF231_Public/include utilitaires-ListeEnt.c
gcc -g -I/Public/INF231_Public/include -o partition2Q1.e partition2Q1.c /Public/INF231_Public/lib/memoire.o utilitaires-ListeEnt.o -lm
ld: fatal: symbol `AjouterEnQueue' is multiply-defined:
        (file /var/tmp//cci2Mtob.o type=FUNC; file utilitaires-ListeEnt.o type=FUNC);
ld: fatal: symbol `CreerListeSingleton' is multiply-defined:
        (file /var/tmp//cci2Mtob.o type=FUNC; file utilitaires-ListeEnt.o type=FUNC);
ld: fatal: symbol `AjouterEnTete' is multiply-defined:
        (file /var/tmp//cci2Mtob.o type=FUNC; file utilitaires-ListeEnt.o type=FUNC);
ld: fatal: symbol `AfficherListeEnt' is multiply-defined:
        (file /var/tmp//cci2Mtob.o type=FUNC; file utilitaires-ListeEnt.o type=FUNC);
ld: fatal: File processing errors. No output written to partition2Q1.e
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `partition2Q1.e'
{ibaneza} 44 >
 
 
Voici le code source:
 
types.h:

Code :
  1. #include <stdio.h>
  2. #include "memoire.h"
  3. #define Nil NULL
  4. typedef struct CelEnt_local {
  5. int E;
  6. struct CelEnt_local *Suc;
  7. } CelEnt;
  8. typedef CelEnt *adCelEnt;


 
utilitaires-ListeEnt.h:

Code :
  1. #include "types.h"
  2. void AjouterEnTete(int, adCelEnt *);
  3. void CreerListeSingleton(int, adCelEnt *, adCelEnt *);
  4. void AjouterEnQueue(int, adCelEnt *);
  5. void AfficherListeEnt(adCelEnt);


 
utilitaires-ListeEnt.c:

Code :
  1. #include "utilitaires-ListeEnt.h"
  2. void AfficherListeEnt(adCelEnt T)
  3. {
  4.   adCelEnt AD;
  5.   AD = T;
  6.   while (AD!=Nil)
  7.     {
  8.       printf("%d ",(*AD).E);
  9.       AD = (*AD).Suc;
  10.     }
  11.   printf("\n" );
  12. }
  13. void AjouterEnTete(int V, adCelEnt *T)
  14. {
  15.   adCelEnt AC;
  16.   Allouer(&AC,CelEnt);
  17.   (*AC).E = V;
  18.   (*AC).Suc = *T;
  19.   *T = AC;
  20. }
  21. void CreerListeSingleton(int X, adCelEnt *T, adCelEnt *Q)
  22. {
  23.   adCelEnt AB;
  24.   Allouer(&AB,CelEnt);
  25.   (*AB).E = X;
  26.   *T = AB;
  27.   *Q = AB;
  28.   (*AB).Suc = Nil;
  29. }
  30. void AjouterEnQueue(int X, adCelEnt *Q)
  31. {
  32.   adCelEnt AA;
  33.   Allouer(&AA,CelEnt);
  34.   (*AA).E = X;
  35.   (*(*Q)).Suc = AA;
  36.   *Q = AA;
  37.   (*AA).Suc = Nil;
  38. }


 
partition2Q1.c:

Code :
  1. #include "utilitaires-ListeEnt.c"
  2. int main(void)
  3. {
  4.   int i;    /* pour le parcours */
  5.   int n;    /* taille de la séquence saisie */
  6.   int X, Y; /* Données : 0 < X < Y */
  7.   adCelEnt Tavant, Tdans, Tapres;
  8.   int EC;
  9.   Tavant = Nil ;
  10.   Tdans = Nil;
  11.   Tapres = Nil;
  12.   printf("Entrer le nombre d'éléments de la liste : " );
  13.   scanf("%d",&n);
  14.   printf("Entrer la borne inférieure X de l'intervalle : " );
  15.   scanf("%d",&X);
  16.   printf("Entrer la borne supérieure Y de l'intervalle : " );
  17.   scanf("%d",&Y);
  18.   for (i=1; i<=n; i++)
  19.     {
  20.       printf("Entrer un élément entier : " );
  21.       scanf("%d",&EC);
  22.       if (EC<X)
  23. AjouterEnTete(EC,&Tavant);
  24.       else
  25. if (EC>=Y)
  26.   AjouterEnTete(EC,&Tapres);
  27. else
  28.   AjouterEnTete(EC,&Tdans);
  29.     }
  30.  
  31.   printf("Contenu de Tavant (<%d) : ",X);
  32.   AfficherListeEnt(Tavant);
  33.   printf("Contenu de Tdans (entre %d et %d) : ",X,Y);
  34.   AfficherListeEnt(Tdans);
  35.   printf("Contenu de Tapres (>=%d) : ",Y);
  36.   AfficherListeEnt(Tapres); 
  37. }


 
Je compile avec un Makefile livré par les profs, et qui marche sans problème pour les autres fichiers...
Allouer(...,...) est défini dans memoire.h et marche sans problème (déjà testé)...
 
Les contenus de partition2Q1.c, utilitaires-ListeEnt.c, utilitaires-ListeEnt.h, types.h se trouvaient dans un seul et même fichier, partitionQ1.c qui compilait sans problème...

Reply

Marsh Posté le 15-11-2005 à 11:16:53   

Reply

Marsh Posté le 15-11-2005 à 11:21:19    

FrenchFrogger a écrit :

Voilà, j'ai un fichier C qui marche sans problème, avec include <stdio.h> et "memoire.h".
 
Mais lorsque je sépare ce fichier en plusieurs fichiers j'ai ce problème lors de la compilation (sous Unix, par X-WIN32):


Classique problème de mauvaise organisation du code...
 
http://mapage.noos.fr/emdel/codage [...] ser_source
http://mapage.noos.fr/emdel/codage.htm#organiser


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-11-2005 à 11:21:56    

Pour quelle raison étrange est-ce que tu includes un .c? :??:


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed