IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

include.h marche dans un fichier .c mais pas dans l'autre


Sujet :

C

  1. #1
    Battosaiii
    Invité(e)
    Par défaut include.h marche dans un fichier .c mais pas dans l'autre
    J'ai 2 fichiers algo.c et numberArrival.c dans lequel j'utilise une fonction appele randgen().
    Cette fonction a besoin de : #include "RandomNumber.h"

    Si je mets #include "RandomNumber.h" dans les 2 fichiers j'obtiens :
    NumberArrival.o:NumberArrival.c.text+0x0): multiple definition of `_randgen'
    Algo.o:Algo.c.text+0x0): first defined here
    NumberArrival.o:NumberArrival.c.text+0x137): multiple definition of `_randint'

    Algo.o:Algo.c.text+0x137): first defined here
    collect2: ld returned 1 exit status
    make: *** [main] Error 1
    Ce qui est normal je vous l'accorde !

    Le probleme etrange c'est que la fonction randgen marche uniquement la ou RandomNumber .h est inclus.
    Par exemple si je mets #include "RandomNumber.h" dans un le fichier algo.c le randgen() dans ce fichier va donne des resultats coherents compris entre 0 et 1.
    Par contre dans numberArrival.c rangen() donnera des resultats incoherents ! Quelqu'un peut m'exdpliquer pourquoi ?


    Plus precisement dans l'autre fichier elle marchera aussi mais avec des resultats incoherents.
    Comme il est impossible de mettre



    Pourtant les 2 fichiers sont relies Voici les include
    la ou est le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "NumberArrival.h"
    #include "Buffer.h"
    #include "RandomNumber.h"
    #define TRUE 1
    #define FALSE 0
    typedef int BOOL;
    NumberArrival.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "RandomNumber.h"
    j'espere avoir ete clair

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Dans ton fichier .h au debut tu met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef randnumber_h_
    #define randnumber_h_
    Et à la fin

    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    je viens d'essayer ce que tu as mis mais ca marche pas quand meme.

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Peux tu poster le contenu du fichier "RandomNumber.h" ?

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <math.h>
     
    double randgen(void);/* This generates a random number uniformly distributed between 0 and 1 */
    int randint(int lo, int hi); /* This generates a random integer uniformly distributed among 
    the set { lo, lo+1,...., hi-1,hi} */
     
    //Ensuite on a la definition des ces 2 fonctions
    Il faut savoir que ce .h marche parfaitement. il a ete fait par un professeur. Je l'ai utilise plusieurs fois inutile de montrer le contenu du codage de ces fonctions.

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Battosaiii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <math.h>
     
    double randgen(void);/* This generates a random number uniformly distributed between 0 and 1 */
    int randint(int lo, int hi); /* This generates a random integer uniformly distributed among 
    the set { lo, lo+1,...., hi-1,hi} */
     
    //Ensuite on a la definition des ces 2 fonctions
    Il faut savoir que ce .h marche parfaitement. il a ete fait par un professeur. Je l'ai utilise plusieurs fois inutile de montrer le contenu du codage de ces fonctions.
    Parce que le code des fonctions se situent dans le .h ?

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Battosaiii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Ensuite on a la definition des ces 2 fonctions
    Il faut savoir que ce .h marche parfaitement. il a ete fait par un professeur.
    Tu/Ton prof ne respectez pas les regles de codage...

    "Pas de fonction dans un .h."

    http://emmanuel-delahaye.developpez....ganiser_source
    http://emmanuel-delahaye.developpez.....htm#organiser
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par gl
    Citation Envoyé par Battosaiii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <math.h>
     
    double randgen(void);/* This generates a random number uniformly distributed between 0 and 1 */
    int randint(int lo, int hi); /* This generates a random integer uniformly distributed among 
    the set { lo, lo+1,...., hi-1,hi} */
     
    //Ensuite on a la definition des ces 2 fonctions
    Il faut savoir que ce .h marche parfaitement. il a ete fait par un professeur. Je l'ai utilise plusieurs fois inutile de montrer le contenu du codage de ces fonctions.
    Parce que le code des fonctions se situent dans le .h ?
    Parce que si c'est le cas c'est normal que ca marche pas. Pas de code dans un .h
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Battosaiii
    Invité(e)
    Par défaut
    j'ai separe la definition des fonctions du .h dans un .c
    et j'ai mis
    #ifndef RandNumber_h_
    #define RandNumber_h_

    #endif

    dans les fichiers qui utilisent les fonctions du .h

    j'ai cette erreur de compilation :

    $ make
    cc -c Algo.c
    cc -c NumberArrival.c
    NumberArrival.c:175:7: warning: no newline at end of file
    cc -c RandomNumber.c
    cc -o main Algo.o Buffer.o NumberArrival.o
    NumberArrival.o:NumberArrival.c.text+0x5c): undefined reference to `_randgen'
    NumberArrival.o:NumberArrival.c.text+0x12b): undefined reference to `_randgen'

    NumberArrival.o:NumberArrival.c.text+0x174): undefined reference to `_randint'

    NumberArrival.o:NumberArrival.c.text+0x1f7): undefined reference to `_randint'

    collect2: ld returned 1 exit status
    make: *** [main] Error 1

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    ce n'est pas une erreur de compilation, mais d'édition de liens.
    je ne connais pas les fonctions évoquées, mais elles sont peut-être dans la bibliothèque mathématique...
    Essaie de rajouter -lm dans ta dernière commande...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Battosaiii
    $ make
    cc -c Algo.c
    cc -c NumberArrival.c
    NumberArrival.c:175:7: warning: no newline at end of file
    cc -c RandomNumber.c
    cc -o main Algo.o Buffer.o NumberArrival.o
    NumberArrival.o:NumberArrival.c.text+0x5c): undefined reference to `_randgen'
    NumberArrival.o:NumberArrival.c.text+0x12b): undefined reference to `_randgen'

    NumberArrival.o:NumberArrival.c.text+0x174): undefined reference to `_randint'

    NumberArrival.o:NumberArrival.c.text+0x1f7): undefined reference to `_randint'

    collect2: ld returned 1 exit status
    make: *** [main] Error 1
    Il faut rajouter le .c contenant ces fonctions a ton projet. Ainsi

    cc -o main Algo.o Buffer.o NumberArrival.o
    devient

    cc -o main Algo.o Buffer.o NumberArrival.o RandomNumber.o
    Quant a

    NumberArrival.c:175:7: warning: no newline at end of file
    il indique juste que la derniere ligne de NumBerArrival n'est pas complete, il suffit de rajouter un retour a la ligne.

  12. #12
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Battosaiii
    j'ai separe la definition des fonctions du .h dans un .c
    et j'ai mis
    #ifndef RandNumber_h_
    #define RandNumber_h_

    #endif

    dans les fichiers qui utilisent les fonctions du .h
    J'ai pas bien compris ou tu a mis ca mais il faut le mettre dans le .h, c'est pour eviter les inclusions multiples
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

Discussions similaires

  1. Rechercher/Remplacer mais pas dans un fichier
    Par manupapet dans le forum VBScript
    Réponses: 8
    Dernier message: 10/02/2013, 09h48
  2. [Jena] modification faite dans le tdb mais pas dans le fichier d'ontologie
    Par annonyme dans le forum Frameworks
    Réponses: 1
    Dernier message: 17/12/2012, 16h51
  3. Réponses: 1
    Dernier message: 16/10/2012, 09h50
  4. Réponses: 7
    Dernier message: 09/12/2008, 00h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo