L'expression du cas n'est pas constante
Je suis un "cas de l'expression non constant' erreur dans une instruction switch. Cependant, l'en-tête fournit une définition des constantes, et le constructeur prévoit d'initialisation pour eux dans sa liste d'initialisation.
En outre, quand je souris sur le "problème" des déclarations qu'il identifie comme des constantes.
const int ThisClass::EXAMPLE_CONSTANT
error expression must have a constant value
Cela semble un peu contre-intuitif pour moi. J'ai fait quelques recherches et trouvé un problème similaire que quelqu'un d'autre avait. Ils ont dit que toutes les constantes doivent en fait être initialisé dans "main" et que c'était une limitation de la langue. Est-ce vraiment le cas? Cela semble peu probable.
source d'informationauteur SirYakalot
Vous devez vous connecter pour publier un commentaire.
La
case
états exigent partie intégrante de la valeur qui doit être connu au moment de la compilation, qui est ce que l'on entend par constante ici. Mais leconst
membres d'une classe ne sont pas vraiment constante dans ce sens. Ils sont tout simplement en lecture seule.Au lieu de champs, vous pouvez utiliser
enum
:Et puis vous pouvez écrire,
Vous avez besoin d'un "vrai" moment de la compilation constante entière.
const
en C++ moyens en lecture seule, et une variable const peutêtre initialisé comme
int y = 0; const int x = y;
, fairex
une copie en lecture seule de la valeury
avait au moment de l'initialisation.Avec un compilateur moderne, vous pouvez soit utiliser
enum
s ouconstexpr
s store (intégrale) les membres de la compilation-constness:Constantes utilisées dans le cas des étiquettes doit être partie intégrante des expressions constantes. Un intégrale expression constante doit satisfaire à un beaucoup plus rigoureuses exigences que d'être un simple objet intégrante déclaré que
const
.Un non-membre de classe statique ne peut pas être utilisé dans une intégrale expression constante, de sorte que ce que vous essayez de faire ne sera pas la compilation. Un membre de classe statique, par exemple, peut être utilisé dans une intégrale expression constante si son initialiseur est "visible" au point d'utilisation.
C'est un peu le bazar. En C++
const
peut être utilisé pour plusieurs choses, comme la déclaration de constantes réelles, et de déclarer des variables en lecture seule.Si vous déclarez:
Mondiale, espace de noms, ou locales, c'est une constante. Vous pouvez l'utiliser lorsque des expressions constantes sont nécessaires (comme le cas des étiquettes ou le tableau des tailles). Cependant, à portée de classe ou comme paramètre d'une fonction, c'est juste une lecture seule variable.
En outre, si vous déclarez à portée de classe:
C'est aussi une constante.
std::map
+ C++11 lambdas solution de contournementCette méthode permet non constantes, devrait nous donner
O(1)
amorti Quelle est la meilleure façon d'utiliser une table de hachage en C++? :De sortie possibles:
Pour une utilisation à partir de l'intérieur de la classe, n'oubliez pas de construire la carte de manière statique, comme illustré à: Pourquoi instruction switch ne peut pas être appliqué sur des chaînes?