modifier une variable membre statique en C++
Je suis en train de définir une classe Util avec une variable membre statique MAX_DIST, dans le sens suivant,
class Util{
public:
static double MAX_DIST;
Util():MAX_DIST(400.0){}
};
et être en mesure de mettre à jour d'une autre classe, par exemple
Util::MAX_DIST = 387.98;
Cela me donne une erreur:
‘double Util::MAX_DIST’ is a static data member; it can only be initialized at its definition
Cependant, si j'initialise MAX_DIST à sa définition, comme
class Util{
public:
static const double MAX_DIST = 400;
Util();
};
(J'ai du ajouter le 'const' comme indiqué par le compilateur, sinon je vais avoir une "ISO C++ forbids initialisation dans les classes de non-const membre statique d'erreur")
Maintenant je ne peux pas modifier MAX_DIST dans d'autres endroits, car il est maintenant prêt seulement:
error: assignment of read-only variable ‘Util::MAX_DIST’
Après des recherches infructueuses sur internet, je ne peux pas trouver une solution à ce paradoxe. Quelqu'un peut-il m'aider?
OriginalL'auteur yang | 2012-11-18
Vous devez vous connecter pour publier un commentaire.
Vous êtes confus définition et déclaration. Vous essayez d'initialiser dans le dernier – C++ interdit. Les autres réponses ont montré comment la définition ressemble: il doit être à l'extérieur la déclaration de la classe, et dans sa propre unité de compilation (sinon, vous allez violer Une Définition de la Règle lorsque vous essayez d'inclure l'en-tête dans plusieurs fichiers source).
Un mot sur les raisons de l'original code ne fonctionne pas: vous essayé de mettre l'initialisation dans la initialiser la liste des constructeur. Cependant, ce constructeur est appelé pour chaque instance. Même si ce code compilé, il serait toujours réinitialiser votre variable statique – pas ce que vous voulez.
OriginalL'auteur Konrad Rudolph
Mettre ceci dans votre
Util.cpp
(ou quel que soit le nom de fichier) fichier:Variables statiques doivent être initialisés.
Réponse longue, citant la norme
9.4.2 $2
:OriginalL'auteur Vincenzo Pii
Dans le premier cas, vous essayez d'initialiser une variable statique à partir dans un contexte statique, c'est à dire à partir de l'intérieur d'un constructeur. Vous avez raison que c'est faux.
Dans le second cas, vous ne voulez pas que votre variable const. Au lieu de cela, vous avez besoin de la déclarer en dehors de la classe, à l'aide d'une instruction comme:
OriginalL'auteur Xymostech