Bonjour à tous,
Je suis confronté à un problème lorsque j'essaie d'initialiser un champ de ma classe déclaré static const:
J'ai vu sur certains exemples que ceci était possible (déclaration + définition dans le .h pour les static const de types intégraux).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class A{ public: static const int MAX = 0; };
En compilant sous GCC, cela fonctionne aussi, mais c'est en faisant le link que j'obtiens l'erreur : "référence indéfinie vers com::bla::A::MAX".
J'en ai donc déduit qu'il faut définir le membre dans le .cpp, de cette façon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // A.h class A{ public: static const int MAX; };Nouveau problème, ce code est soumis au problème du fiasco dans l'ordre d'initialisation des membres statiques. Il faut donc que je transforme ce code en utilisant la solution usuelle (passer par une fonction appelée à chaque fois).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // A.cpp const int A::MAX = 0;
Nouveau problème : si je passe par cette solution, je ne peux plus profiter du static const. Je m'explique : je veux que mon membre MAX puisse être utilisé dans le case d'un switch. Or, si je passe par la fonction, je ne pourrais pas utiliser MAX dans un case, car on ne peut pas y appeler de méthode.
Avez-vous déjà rencontré ce problème ? Est-ce bien GCC qui n'accepte pas la définition dans le .h ?
Désolé, j'ai été un peu long, mais j'espère clair. Merci d'avance pour votre aide !
Partager