L'initialisation statique tableau de chaînes de caractères (C++)?
Je ne peux pas pour la vie de me comprendre comment le faire correctement. J'ai une classe qui a besoin de stocker des constantes (le texte qui correspond à des valeurs de type enum) - je l'ai déclarée comme telle (publiquement) dans ma classe:
const static char* enumText[];
Et je suis en train de les initialiser comme ceci:
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
Cependant gcc me donne l'erreur suivante:
'const char* Maclasse::enumText[]' n'est pas un membre statique de la classe MyClass'
Ce que je fais mal? Merci!
Essayez: static const char* enumText[]; dans la classe?
Je soupçonne fortement que ce n'est quelques anciennes g++ version qui traite incorrectement
Pourriez-vous coller une complète et compilable morceau de code dans votre réponse, qui montre le problème?
Je soupçonne fortement que ce n'est quelques anciennes g++ version qui traite incorrectement
const static char* []
y static char* [] const
plutôt que static const char* []
(en raison de static
être dans un "insolite").Pourriez-vous coller une complète et compilable morceau de code dans votre réponse, qui montre le problème?
OriginalL'auteur Paul D. | 2009-09-03
Vous devez vous connecter pour publier un commentaire.
Ce code compile:
Vérifier votre code et de trouver des différences. Je ne peux que penser que vous n'avez pas de définition de l'attribut static dans la classe, vous avez oublié d'inclure l'en-tête ou que vous avez mal orthographié le nom.
X::enumtext
ou sinon vous êtes juste de créer une nouvelle variable.C'était une faute de frappe dans la réponse, je l'ai corrigé. De toute façon, le code ne compile avec gcc (les deux 4.0 dans MacOSX et 4,3 ubuntu)
Wooo je me sens stupide, j'ai eu une faute de frappe que je n'ai pas d'avis..
Il y a deux d'entre nous.
Comment voulez-vous faire si le type de données a été
std::string
au lieu dechar*
?OriginalL'auteur David Rodríguez - dribeas
Cette compile avec gcc version 4.0.1:
Compilé avec:
Êtes-vous sûr que MyClass
::enumText
référence à la bonne classe?OriginalL'auteur E.M.
Que le compilateur dire, vous essayez de définir une statique membre de MyClass qui serait un const char* tableau nommé enumText. Si vous n'avez pas de déclaration dans la classe, il y a un problème.
Vous devriez avoir :
ou peut-être vous n'avez pas envie d'un membre statique. Si non, youy ne devriez pas avoir à utiliser une classe dans le nom.
De toute façon, qui n'ont rien à voir avec le tableau intialization.
mais souvent, ce que l'OP dit et la réalité sont 2 choses différentes, surtout depuis ce qu'il dit qu'il a fait devrait fonctionner.
OriginalL'auteur Klaim
Donné le message d'erreur, il me semble que vous avez une déclaration de
MyClass
quelque part (dans un autre en-tête peut-être?) qui n'a pas enumText[] déclaré. Le message d'erreur indique que le compilateur connaîtMyClass
, mais il ne sait pas à propos de laenumText
membre.Je regarde pour voir si vous avez de multiples déclarations de
MyClass
tapies dans l'ombre.Pouvez-vous obtenir wintermute de l' ou T. E. D. exemples pour compiler?
OriginalL'auteur Michael Burr
Le code suivant compile très bien pour moi dans VS 2005:
Si je devais prendre un sauvage deviner, je dirais que votre initilization ligne dans un fichier source séparé, et vous avez oublié de #inclure l' .h de fichier qui contient MyClass. C'est exactement le genre de chose que je vis et faire tout le temps.
Aussi, il semble assez probable pour moi que vous avez la const dans le mauvais endroit (ou pas assez). La façon dont vous l'avez maintenant, ce n'est pas le tableau qui est constant, ou les pointeurs dans le tableau; le caractère d'éléments à l'intérieur.
OriginalL'auteur T.E.D.