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:
- des membres statiques constants et publiques pour les constantes
- 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;En revanche, toutes mes méthodes statiques de maths définie en inline sont opérationnelles.
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; }
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
Partager