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 :

Error de link sur des membres statiques définis


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Error de link sur des membres statiques définis
    Bonjour,

    Depuis quelque jours, j'ai un problème bloquant à propos de membres statiques dans une classe. Malgré le parcours de la FAQ http://cpp.developpez.com/faq/cpp/?page=static et du forum, je n'arrive a pas trouver de solution ou de problème similaire.
    Je travaille sur ma libraire de maths et après plusieurs essai, j'ai décidé de garder le principe d'Ogre3D et de idSoftWare à propos de leurs constantes:
    Une classe Math avec tout en statique et publique:
    1. des membres statiques constants et publiques pour les constantes
    2. des méthodes statiques publiques pour les opérations de maths.


    Mon problème est le suivant. Lorsque j'utilise une constante en dehors de la libraire Math.lib, le linker me dit que mes constantes ne sont pas définie.
    Or je pensais que des membres statiques étaient explicitement exporter dans la libraire et donc visible pour les autres libs.

    Je suis sous Windows + Visual express.
    Le linker me sort des erreur LNK2001 comme si mon cpp n'existait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Math.h
     
    class Math
    {
    public:
        static const float PI;
        ...
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Math.cpp
     
    const float Math::PI = 3.14f;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //main.cpp
     
    #include "Math.h"
    int main(int argc, char **argv)
    {
        const float b = Math::PI;
        return 0;
    }
    En revanche, toutes mes méthodes statiques de maths définie en inline sont opérationnelles.
    J'ai trouvé une solution temporaire moisie pour "exporter" mes symboles en incluant le Math.cxx dans le main, mais je trouve ça vraiment moche.

    Je n'ai aucune erreur à la génération, juste au link. Si je modifie Math.cpp en rajoutant des erreurs, je les vois à la compilation, donc mon fichier est bien pris en compte par le compilateur.

    Merci d'avance à ceux qui se pencheront sur la question.

    Christian

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2006
    Messages : 37
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par chr.charles Voir le message
    Mon problème est le suivant. Lorsque j'utilise une constante en dehors de la libraire Math.lib, le linker me dit que mes constantes ne sont pas définie.
    Or je pensais que des membres statiques étaient explicitement exporter dans la libraire et donc visible pour les autres libs.

    Je suis sous Windows + Visual express.
    Le linker me sort des erreur LNK2001 comme si mon cpp n'existait pas
    Je ne connais pas Visual express.

    Comme ton code est bon ; je pense que tu ne dis pas au linker d'utiliser le code objet issu de Math.cpp.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Citation Envoyé par chr.charles Voir le message
    Le linker me sort des erreur LNK2001 comme si mon cpp n'existait pas
    Quel est le message d'erreur?

    Citation Envoyé par N i h i l Voir le message
    Je ne connais pas Visual express.
    Les visual studio express edition sont exactement les mêmes que la série normale (même compilateur, même débuggeur, même éditeur, même licence*...), sauf qu'ils sont gratuits et certaines fonctionnalités sont absentes. A ma connaissance, la seule chose absente dans les versions express c'est la MFC. Je sais qu'il y en a d'autres, mais ce sont des choses que je n'utilise jamais donc je ne m'en souviens pas.

    * ce que je veux dire c'est que contrairement à une rumeur assez répandue, on a parfaitement le droit de commercialiser les logiciels que l'on crée avec les versions express.

    ps: et comme de toutes façons je n'utilise pas la MFC, j'utilise les 2 versions (version payante au travail, version express chez moi) indistinctement.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci à tout les deux.
    Ce matin, j'ai trouvé mon erreur. En effet, le linker n'utilisait pas la lib générée par le compilateur.
    J'utilise CMake pour générer ma solution et j'ai simplement oublier un "target_link_librairies(...)" qui rajoute la lib demandée aux entrées de mon executable.

    C'est résolu.

    Merci.

    Christian

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/03/2013, 13h23
  2. [ERROR : FOREIGN KEY] sur des champs différents
    Par lerieure dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/05/2010, 23h57
  3. Fonctions sur des cookies non définies
    Par nico26 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/03/2008, 09h38
  4. Réponses: 5
    Dernier message: 21/07/2007, 12h30
  5. [Joomla!] Placer des liens externes sur des pages statiques
    Par BRMAR dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/07/2007, 18h04

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