0
votes

La classe Enum n'accepte pas le texte avec un trait d'union / tiret en C ++

Je crée une classe Enum 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? XXX


1 commentaires

Le nom de l'énumérateur (par exemple, vente ) 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 ; Un Enum ne stocke pas le texte.


3 Réponses :


1
votes

Je ne peux pas éviter le trait d'union / pointe car il fait partie des codes de produit, existe-t-il un travail autour.

Vous ne pouvez pas utiliser l'hyphen - dans l'une des variables ou des noms de constantes en C ++.

Il n'y a pas de solution de contournement, sauf que vous pouvez utiliser le soulignement '_' à la place.


0 commentaires

3
votes

Un trait d'union ( - code>) ne peut pas faire partie des identificateurs dans la langue C ++.

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 ( _ code>) est utilisé dans des identifiants comme des constantes de macros et d'enum: p> xxx pré>

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>

#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);
}


2 commentaires

En effet, le - 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.



0
votes

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: xxx

TESTABLE ici: https://onlinegdb.com/sj3k9b5mw


0 commentaires