|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Bonjour,
J'ai un problème d'initialisation d'une variable membre de type static const double, mais uniquemment sous Windows (Visual Studio) et pas sous Linux/MacOSX. Si on a la classe suivante: Code :
Code :
can't initialize non-integral static const membre
J'ai pas compris le problème et pourquoi il apparait uniquement sous windows. Merci de votre aide. |
||
|
|
00
|
|
|
#2 | |||||
![]() ![]() |
Bonjour,
Il me semble qu'il faut initialiser les static dans le .cpp : Code foo.h :
Code foo.cpp :
EDIT : Après une simple recherche : Citation:
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|||||
|
|
10
|
|
|
#3 |
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
OK, c'est ce que j'ai cru comprendre aussi, mais pourquoi sous Linux et MacOSX je n'ai pas eu de problème alors que j'initialise dans le .h.
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Développeur C Inscription : août 2004 Messages : 2 077 ![]() |
En effet, j'ai l'erreur avec VS 2008.
Pourtant en regardant la MSDN sur le code d'erreur C2864 Microsoft dit que ça devrait marcher. Ah non :Bon si tu remplaces double par int, ça marche. Il doit y avoir une restriction sur le type. Reste a savoir ce qu'est une donnée "intégrale". |
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Ah nan, ça ça va pas être possible.
Dans les options de compilation de visual studio? D'ailleurs j'aimerai bien les connaitres. C'est ce que je me demande également. |
|
|
00
|
|
|
#6 | |
![]() ![]() |
Citation:
Une donnée "intégrale", ce n'est pas un entier (int abréviation de integer = intégrale) ?
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
00
|
|
|
#7 | ||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Citation:
Citation:
A moins qu'il y ait juste une différence subtile. |
||
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
Integer fait référence à int et integral à tous les entiers de (unsigned) char à (unsigned)long long int ?
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() ![]() Inscription : mai 2008 Messages : 937 ![]() |
Citation:
Citation:
http://home.roadrunner.com/~hinnant/TypeHiearchy.pdf Edit : En C++03 seul les types const static "integral" et enum peuvent être initialisés dans la classe (dans le .h). Donc si ça marche pour les doubles avec GCC c'est probablement du à une extension, il faudrait essayer avec l'option -pedantic et voir si ça génère un warning. |
||
|
|
00
|
|
|
#10 | |||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Citation:
A présent cela génère l'erreur suivante: Code :
|
|||
|
|
00
|
|
|
#11 |
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Je dois donc initailiser mes membres dans le cpp plutôt alors.
|
|
|
00
|
|
|
#12 |
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Je dois donc initailiser mes membres static const double dans le constructeur dans le cpp alors.
Moi je trouvais cela mieux de les initialiser directement dans le .h plutot que dans le constructeur. |
|
|
00
|
|
|
#13 | |
![]() ![]() |
Citation:
![]() Cf mon premier post.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
00
|
|
|
#14 | |||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Citation:
Mais de le .cpp, tu fais cette initialisation où? Tout au début, en dehors de tout alors (comme une varible globale)? |
|||
|
|
00
|
|
|
#15 | ||
![]() ![]() |
C'est comme lorsque tu implémentes une méthode de ta classe.
Code .cpp :
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||
|
|
00
|
|
|
#16 |
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
D'accord, j'ai compris, je vais tester à présent.
|
|
|
00
|
|
|
#17 | ||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Ca ne marche pas, le compilateur considère que dans le .cpp j'essaye de définir une seconde fois une varible qui existe déjà:
EDIT: en fait il fallait "répéter" le mot clef const, et là ça marche. Foo.cpp et non pas : Dans ce cas, pourquoi ça râle pas pour le mot clef static que je n'est pas "répété" ? Je rappelle le Foo.h Code :
|
||
|
|
00
|
|
|
#18 |
![]() ![]() |
Pour le const c'est de ma faute désolé
![]() Pour le static, il peut avoir 3 effets/signification. Si tu le rajoutes à l'extérieur de ta classe, tu vas dire que ta variable ne peut être visible que dans le fichier où tu l'a déclaré. Sinon pour la préfixé, je ne mettrait que m_machin pour dire que c'est un membre, mais pas plus.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
00
|
|
|
#19 | ||||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 748 ![]() |
Donc
Foo.cpp Code :
Code :
|
||||
|
|
00
|
|
|
#20 | |
![]() ![]() |
La différence est assez simple :
Citation:
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com