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 :

Problème d'édition des liens


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Problème d'édition des liens
    Salut a tous
    J'ai un probleme un peu bete, mais dont je n'arrive pas a résoudre. Dans le cadre d'un projet sous visual c++, j'ai fais une librairie, que je dois utiliser dans plusieurs autre librairie de mon projet. Dans cette premiere librairie, voici ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef _LISTENER_H
    #define _LISTENER_H
     
    typedef struct listener{
         // champs
    }LISTENER;
     
    // déclarations des fct
    #endif
    Dans mes autres librairies, j'utilise ce type LISTENER, et donc je fais plusieurs #include "listener.h"
    Voici ce que j'obtiens a la compilation :
    Error LNK2005: "struct listener * listener" (?listener@@3PAU0@A) already defined in ...

    J'ai essayé de définir cette structure dans listener.cpp et de mettre seulement la déclaration dans le .h, sans succes :/
    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par keyra
    J'ai essayé de définir cette structure dans listener.cpp et de mettre seulement la déclaration dans le .h, sans succes :/
    une chose est sure, tu peux laisser ta declaration de structure dans ton .h, sans ca, je ne vois pas ou est le probleme la...
    développeur en folie cherche à ... développer encore plus

  3. #3
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    peux-tu mettre le code ou tu reutilises ta fonction stp????
    développeur en folie cherche à ... développer encore plus

  4. #4
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Rien à voir avec le problème mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct{
         // champs
    }LISTENER;
    marche.

    Attention:
    -Les headers doivent contenir les déclarations des objets, puis "#include" provoque le remplacement du nom du header par les déclarations.
    -Puis après la compilation du code le linker regarde si les fonctions sont bien définies.

    Quel est le type de librairie?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    oui oui, la declaration marche, c'est pour ca que je lui demande l'utilisation
    développeur en folie cherche à ... développer encore plus

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef _LISTING_H
    #define _LISTING_H
     
    #include <windows.h>
    #include "listener.h"
     
    void Liste(LISTENER *l);
     
    // d'autres fonctions
     
    #endif
    Dans mon main.cpp, je l'utilise aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "listing.h"
    #include "listener.h"     /* ici je l'ai rajouté mais il n'y a pas besin car deja dans listing.h */
     
    LISTENER *l;
     
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    // ...
    }
    Donc si je rajoute au projet ce fichier :
    dialog.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef _DIALOG_H
    #define _DIALOG_H
     
    #include "listener.h"
     
    void Affiche(LISTENER *l);
    // ...
    #endif
    je rajoute un #include "dialog.h" dans main.cpp, j'ai ce message d'erreur :/

  7. #7
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    tu veux dire que ton programme plante uniquement quand tu ajoute ton dialog.h au main???
    développeur en folie cherche à ... développer encore plus

  8. #8
    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 keyra
    J'ai essayé de définir cette structure dans listener.cpp et de mettre
    Si tu fais du C++, c'est le forum d'à coté...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Oui c'est seulement lorsque j'ajoute ce fichier que j'ai ce prob d'edition des liens.
    Emmanuel Delahaye > C'est du C que je fais, mais visual c++ n'aime pas beaucoup les extensions .c, donc je mets des .cpp

    EDIT : c'est résolu ! j'ai trouvé le problème : le message etait explicite en fait. C'est la déclaration de 2 variables globales portant le meme nom (listener). Donc forcément le linker est pas très content dans ce cas... Merci a tous pour votre aide

  10. #10
    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 keyra
    C'est du C que je fais, mais visual c++ n'aime pas beaucoup les extensions .c, donc je mets des .cpp
    Comment ça "n'aime pas beaucoup" ? Il sait compiler en C ou non ? Si oui, il doit accepter les .c. Sinon, c'est qu'il ne fait que du C++, et dans ce cas, j'insiste, c'est le forum d'à coté. Et rappelle toi que le C et le C++ sont des langages differents.

    http://nicolasj.developpez.com/artic...ompatibilites/
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. [édition des liens] ld: Missing library symbol table in
    Par kaloskagatos dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 25/08/2006, 11h27
  2. [dll] pb à l'édition des liens
    Par poukill dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 05/05/2006, 09h56
  3. [VC++] Erreur d'édition des liens LNK1143
    Par Yellowmat dans le forum MFC
    Réponses: 6
    Dernier message: 01/02/2006, 15h00
  4. [Dev-C++] Problème d'édition des liens
    Par shura dans le forum EDI
    Réponses: 5
    Dernier message: 30/08/2005, 09h35
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

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