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 :

Fonction Friend et Link Error


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Fonction Friend et Link Error
    Bonsoir, j'ai un "gros" problème avec le code suivant je sais plus quoi faire d'ou ce post en esperant une aide de votre part

    Waz.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // Import/Export Pattern
    #ifdef TEST_EXPORTS
    #define DllExport __declspec(dllexport) 
    #else 
    #define DllExport __declspec(dllimport) 
    #endif
     
    #pragma once
    #ifndef __Test__Waz__
    #define __Test__Waz__
     
    #include "WazImpl.h"
     
    class DllExport Waz
    {
    /* Friends */
    friend class WazImpl;
    friend Waz operator*(const Waz &,const Waz &);
     
    private:
     
    WazImpl *p;
    ...
    public:
    ...
    };
     
    #endif /* defined(__Test__Waz__) */
     
    Waz operator*(const Waz &,const Waz &);
    Waz.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (all def of the operator in public and ...)
    Waz operator*(const Waz & w1, const Waz & w2)
    {
    Waz ww;
    *ww.p=*w1.p * *w2.p;
    return ww;
    }

    Ensuite voila mon mail dans une appli console dans la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main()
    {
    Waz a;
    Waz(1,1) =3 ; // cette ligne fonctionne bien ce qui veut dire que ma dll export bien ses symboles
    Waz b;
    Waz c = a*b; // ERROR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR:
    error LNK2019 : unresolved external symbol "class Waz __cdecl operator*(class Waz const &, class Waz const &)" (??D@YA?AVWaz@@ABV0@0@Z) referenced in the function _main
    error LNK1120 : 1 unresolved external symbol
    Une idée?
    Merci d'avance!!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Il semble que tu n'exportes pas dans la DLL ta fonction libre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Tu veux dire mettre DllExport devant la définition qui est en dehors de la classe?
    En faisant ca l'erreur change en C2375 : 'operator*' : redefinition; liaison différente

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    le problème ce serait pas plutôt que, oui tu exportes bien la classe, mais pas l'opérateur libre ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Il faut peut-être spécifier l'export 2 fois pour la fonction libre : une fois au sein de la classe, une fois avec la définition.

Discussions similaires

  1. Linked Error sur une fonction
    Par hugo1992 dans le forum C
    Réponses: 4
    Dernier message: 08/12/2007, 11h16
  2. link error sous vc++
    Par gdpasmini dans le forum MFC
    Réponses: 9
    Dernier message: 23/03/2006, 10h01
  3. Réponses: 2
    Dernier message: 31/10/2005, 13h40
  4. Réponses: 6
    Dernier message: 04/10/2005, 17h37
  5. Réponses: 3
    Dernier message: 03/03/2005, 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