Je crée une classe Enum code> mais le compilateur CDT dans Eclipse est une erreur d'erreur car ma liste constante a des traits d'union. Je ne peux pas éviter l'union d'union / pointe parce que cela fait partie des codes de produit. Y a-t-il une solution de contournement?
3 Réponses :
Je ne peux pas éviter le trait d'union / pointe car il fait partie des codes de produit, existe-t-il un travail autour. P> blockQuote>
Vous ne pouvez pas utiliser l'hyphen
- code> dans l'une des variables ou des noms de constantes en C ++. P>
Il n'y a pas de solution de contournement, sauf que vous pouvez utiliser le soulignement '_' à la place. P>
Un trait d'union ( Un identifiant est une séquence de chiffres, de soulignement, de minuscules et de lettres latines majuscules, et la plupart des unicodes personnages. Il doit commencer par un soulignement ou une lettre. Voir aussi CPPRAReference / identificateurs . P> Typiquement, le Le caractère de soulignement ( Enum constantes ne stocke pas le texte, alors ils ne stockent pas de texte. Il faut toutefois être formaté exactement comme vos codes de produit. Pour convertir des constantes ENUM à vos codes de produit, vous pouvez procéder comme suit: P> - code>) ne peut pas faire partie des identificateurs dans la langue C ++.
_ code>) est utilisé dans des identifiants comme des constantes de macros et d'enum: p>
#include <map>
constexpr const char* textOf(ProductCode code) {
switch (code) {
case ProductCode::JELLY_BEANS: return "JELLY-BEANS";
case ProductCode::SALE: return "SALE";
case ProductCode::TWISTED_TWIRLS: return "TWISTED-TWIRLS";
case ProductCode::FIVE_STARS: return "5-STARS";
}
}
ProductCode codeOf(const std::string &str) {
static const std::map<std::string, ProductCode> map{
{textOf(ProductCode::JELLY_BEANS), ProductCode::JELLY_BEANS},
{textOf(ProductCode::SALE), ProductCode::SALE},
{textOf(ProductCode::TWISTED_TWIRLS), ProductCode::TWISTED_TWIRLS},
{textOf(ProductCode::FIVE_STARS), ProductCode::FIVE_STARS}
};
return map.at(str);
}
En effet, le - code> est lu comme un signe moins, de sorte que le compilateur ne le lit pas correctement.
Et un identifiant doit commencer par un soulignement ou une lettre. +1.
Comme indiqué [ 1 , 2 ], cela ne peut pas être fait avec un énumé car alors que vos constantes doivent être valides d'identificateurs C ++ et un trait d'union ou à partir d'un numéro le permettraient de le rendre invalide.
Toutefois, en tant que" sangariant ", Vous pouvez utiliser une carte C ++ à la place comme ceci: p> TESTABLE ici: https://onlinegdb.com/sj3k9b5mw p> p>
Le nom de l'énumérateur (par exemple,
vente code>) n'est pas dans le programme final compilé. Si vous souhaitez lire ou imprimer des codes de produit, vous avez besoin d'une liste de noms distincte pour cela de toute façon i>; Un
Enum code> ne stocke pas le texte.