Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2845 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Erreur "fonction" is multiply-defined...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur "fonction" is multiply-defined...

n°1245863
FrenchFrog​ger
http://antony-ibanez.eg2.fr/
Posté le 15-11-2005 à 11:16:53  profilanswer
 

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

mood
Publicité
Posté le 15-11-2005 à 11:16:53  profilanswer
 

n°1245867
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-11-2005 à 11:21:19  profilanswer
 

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/
n°1245868
skeye
Posté le 15-11-2005 à 11:21:56  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Erreur "fonction" is multiply-defined...

 

Sujets relatifs
Opération avec la fonction RANGEErreur ggc que je sais pas resoudre
erreur sqlBouton et appel fonction
Création d'une fonction sous ExcelErreur de test avec plus de 2 : $_FILES
fonction copy() de fichierChamps de formulaire obligatoires : où est l'erreur ?
Quel est le fonction pour détecter le type variable renvoyé ? (suite)problemme d'argument dans une fonction
Plus de sujets relatifs à : Erreur "fonction" is multiply-defined...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR