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

Autres éditeurs Discussion :

[linking de projet] definition multipe


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut [linking de projet] definition multipe
    Bonjour, j'ai essaié de faire un projet en mode console, j'ai crée normalement, mon projet a besoin d'une liste chainée et de fonctions de manipulation, alors me suis dit pour ne pas allourdir le code , de mettre dans plusieurs fichiers. genre : main.c et implem.c et traitement.c ;
    le fichier traitement.c contiens une seule fonction pour le moment "menu", et des include standard. cette fonction menu est appelé de main() directement. quand j'essaie de compiler chaque fichiers separement, j'ai aucun probleme, mais une fois je fais "tout reconstruire" 'je suis sous devCpp, alors la j'ai un message d'erreur genre "multipe definition pour menu" et first defined here. Est ce qu'on peut eclairer ma lanterne sur la compilation separée, merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    On peut voir à quoi ressemble le fichier qui déclare la fonction menu ?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    j'ai resolu le probleme en partie en ajoutant un fichier trait.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef H_GL_HELLO
    #define H_GL_HELLO
     
    int menu ();
     
    #endif
    j'ai attaché au projet, le probleme, le programme degenere ;
    j'ai copié collé du tutorial de makefile sans trop comprendre.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    nouvelle version du fichier trait.h ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef H_GL_TRAITEMENT
    #define H_GL_TRAITEMENT
     
    int menu(void);
     
    #endif
    si quelqu'un peux m'expliquer, sur le tutoriel de makefile present sur le site, je vois pas d'explication ;

  5. #5
    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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par leonardoo
    sur le tutoriel de makefile present sur le site, je vois pas d'explication ;
    Vu que c'est un tutoriel sur l'utilisation de Makefile et pas sur l'organisation des sources c'est assez normal.

    Si tu pouvais poster le code (ou mettre un lien permettant de le recuperer si il est trop important), il serait possible de voir plus facilement ou se situe exactement ton probleme.

  6. #6
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    le probleme a été resolu quand j'ai fait le header avec le code cité en haut, donc je deduis que #include "traitement.c" n'est pas approprié, mais faut plutot un header pour faciliter la tache de l'editeur du lien, si on pouvai me montrer un lien pour comprendre tout ça. merci.

    ps : il me semblait que la page perso de monsieur emmanul de lahaye contenai un tel lien, mais quand j'y suis allé, j'ai pas vu d'article sur la compilation separé et l'organisation des fichiers, si on pouvais eclairer ma lanterne

  7. #7
    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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par leonardoo
    le probleme a été resolu quand j'ai fait le header avec le code cité en haut, donc je deduis que #include "traitement.c" n'est pas approprié, mais faut plutot un header pour faciliter la tache de l'editeur du lien, si on pouvai me montrer un lien pour comprendre tout ça. merci.
    Il ne faut pas inclure les fichiers sources avec la directive #include mais les lie dans l'executable final.
    Apparement, initialement tu faisais les deux ==> la fonction menu etait donc presente deux fois :
    * une fois dans le fichier traitement.c inclus avec la directive include
    * une fois dans le fichier traitement.c lie dans le projet

    Citation Envoyé par leonardoo
    ps : il me semblait que la page perso de monsieur emmanul de lahaye contenai un tel lien, mais quand j'y suis allé, j'ai pas vu d'article sur la compilation separé et l'organisation des fichiers, si on pouvais eclairer ma lanterne
    Tu veux sans doute faire reference a :
    http://emmanuel-delahaye.developpez....ganiser_source
    http://emmanuel-delahaye.developpez.....htm#organiser

  8. #8
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    tout a fait, c'est le #include "traitement.c" qui faisai que la fonction etait defini deux fois, mais on fait comment pour lier un fichier au projet, suffit de l'ajouter au projet non ?

    sinon merci pour les liens. par contre, pourquoi quand je mentionne menu dans le header ça cause pas de probleme ? (dans le sens je la mentionne)

  9. #9
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    salut, par contre je viens de faire une constations, le fichier "implem.c" qui contient la definition de ma liste chainée, qui est consideré comme un element du projet dans la mesure qu'il est attaché a projet.dev .. quand je l'include pas, une declaration du type "noeud" se voit fausse (ne marche pas) si on peux aussi eclairer ma lanterne, merci

  10. #10
    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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par leonardoo
    tout a fait, c'est le #include "traitement.c" qui faisai que la fonction etait defini deux fois, mais on fait comment pour lier un fichier au projet, suffit de l'ajouter au projet non ?
    Ca depends de ce que tu utilises pour generer ton executable.
    Avec un Makefile il suffit d'ajouter le .c dans la liste des .c, avec des outils du type Visual, Code::Blocks, etc il faut ajouter le fichier au projet.

  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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par leonardoo
    quand je l'include pas, une declaration du type "noeud" se voit fausse (ne marche pas) si on peux aussi eclairer ma lanterne, merci
    Et "noeud" c'est quoi ? Une fonction, une structure, autre chose ?

  12. #12
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    je m'excuse pour mon imprecision, quand j'ai parlé du type noeud, je parlais surtout de ma liste chainée, car : j'ai fait une structure "donnée", et une structure adherent qui contien deux variable, une de type "donnée" et l'autre de type pointeur sur adherent. les deux declarations etant dans implem.c . Je me vois obligé de l'inclure dans chaque fichier avec #include si je veux utiliser le type adherent, meme si (je suis dans dev cpp) je l'ai ajouté au projet (le fichier implem.c).

  13. #13
    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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par leonardoo
    je m'excuse pour mon imprecision, quand j'ai parlé du type noeud, je parlais surtout de ma liste chainée, car : j'ai fait une structure "donnée", et une structure adherent qui contien deux variable, une de type "donnée" et l'autre de type pointeur sur adherent. les deux declarations etant dans implem.c . Je me vois obligé de l'inclure dans chaque fichier avec #include si je veux utiliser le type adherent, meme si (je suis dans dev cpp) je l'ai ajouté au projet (le fichier implem.c).
    Les structures et autres types que tu crees doivent etre place dans un fichier d'entete si ils sont destine a etre utilise par plusieurs fichiers sources. Il suffit alors d'inclure ce fichier .h dans les fichiers .c qui en on besoin.

  14. #14
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Par défaut
    c'est effictivement ce que j'ai constaté, merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Link & multiple definition
    Par Pece_ dans le forum Langage
    Réponses: 12
    Dernier message: 02/07/2011, 13h30
  2. Réponses: 2
    Dernier message: 18/02/2009, 08h29
  3. Réponses: 0
    Dernier message: 09/02/2009, 17h55
  4. BCB 2009 - pb au link d'un projet
    Par yozart dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/01/2009, 17h05
  5. Multiple definition error (link)
    Par SpongeBob dans le forum Débuter
    Réponses: 7
    Dernier message: 14/08/2008, 18h45

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