Comment initialiser un static const float dans une classe C++ dans Visual Studio
J'ai un code comme ceci:
class MyClass
{
private:
static const int intvalue= 50;
static const float floatvalue = 0.07f;
};
dans Visual studio 2010 et j'obtiens cette erreur:
Myclasses.h(86): error C2864: 'MyClass::floatvalue : only static const integral data members can be initialized within a class
Alors comment initialiser une constante statique float en c++?
Si j'utilise constructeur, à chaque fois qu'un objet de cette classe est créée, la variable est initialisée qui n'est pas bon.
il semble que le code est compilé avec GCC sous Linux.
Il ne compile pas sur GCC pour moi, mais donne un très beau pointeur: erreur: ‘constexpr "nécessaire pour l'initialisation de classe de la donnée membre statique ‘const float Maclasse::floatvalue" de non-intégré type. Bien sûr, considérant que
double possible de C++ initialiser des variables statiques dans la classe?
constexpr
n'est même pas dans VS2012...double possible de C++ initialiser des variables statiques dans la classe?
OriginalL'auteur mans | 2013-07-10
Vous devez vous connecter pour publier un commentaire.
MyClass.h
MyClass.cpp
Aussi, concernant
Cela est dû à une extension. Essayez avec des drapeaux comme
-std=c++98
(ou-std=c++03
, ou-std=c++11
si votre version est assez récent) et-pedantic
et vous (correctement) une erreur.Eh bien, c'est pas vraiment nécessaire si votre programme ne prend jamais son adresse (qui peut se produire lors du passage par référence const), mais c'est une bonne pratique (et en effet, si l'adresse n'est jamais nécessaire, alors le compilateur est susceptible de ne pas allouer de stockage à tous de toute façon).
(Et si vous voulez pour l'empêcher de prendre son adresse, vous pouvez utiliser un
enum
à la place.)Ceci est utile pour obtenir le code à compiler avec les deux C++98 et C++11, comme le C++11 veut un constexpr.
OriginalL'auteur gx_
Essayez les solutions suivantes.
Dans le fichier d'en-tête, au lieu de votre instruction en cours d'écriture:
Dans le fichier CPP, écrire:
OriginalL'auteur Daniel Daranas
Vous devez les définir en dehors de la classe, comme suit:
Bien sûr, ce ne devrait pas être fait dans un en-tête, ou vous obtiendrez un multiple instance d'erreur. Avec
int
s, vous pouvez simuler vous-même à l'aide deenum {intvalue = 50};
, qui ne fonctionnera pas avec des chars, des si.static const int
membre. Le seul problème ici est lafloat
, ce qui n'est pas un type intégral. Merci de ne pas continuer à utiliser le protocole enum hack en C++, son jour est venu et reparti. C'est ce que les constantes sont faites pour.OriginalL'auteur riv