2011-03-29 3 views
0

J'ai un outil externe qui génère un ENUM basé sur les entrées de l'utilisateur. Maintenant ce ENUM est utilisé par mon code C++ où je dois sélectionner un ENUM particulier basé sur une variable dire 'x'. Les ENUMS générés sont de la forme 'ENUM_1', 'ENUM_2', 'ENUM_3' .... etc. Maintenant, je veux le code dans mon code de sorte que l'ENUM approprié est choisi sur la base de «x». J'ai essayé d'utiliser la fonction strcat comme:comment utiliser strcat avec un ENUM?

typedef enum (enum_1, enum_2, enum_3...enum_n) map1; 

y=(map1)strcat("enum_", x); 

mais il me donne l'erreur « Impossible de convertir de char * en map1

Quelqu'un peut-pls suggérer une méthode pour atteindre cet

ThankYou

..

Répondre

1

vous ne pouvez le faire en utilisant strcat. d'après la description que je comprends est que vous voulez convertir x-map1. pour ce faire, vous pouvez le faire map1 m = (map1)(x-1); Voir cet exemple de code:

typedef enum { enum_1, enum_2, enum_3} map1; 

int main() 
{ 
    int x = 1; 
    map1 m = (map1)(x-1); 
} 

-1 est nécessaire parce que, la valeur entière des énumérations en map1 commence à partir de 0.

0

Maintenant, je veux que le code à l'intérieur de mon code tel que le ENUM appropriée est choisie en fonction sur 'x'.

valeurs sont dénombrées constantes et en fonction de la déclaration que je suppose que x est un type de données entier.

y=(map1)strcat("enum_", x); 

passage de paramètres strcat (..) doivent être de type char*. Et clairement x n'est pas de type char* basé sur la déclaration précédente. Il n'est pas clair pourquoi utilisez-vous strcat pour réaliser cette tâche.

Réponse à la ligne de votre sujet: No. Vous ne pouvez pas utiliser strcat avec des valeurs énumérées.

1

Vous ne pouvez pas faire cela. Eh bien, vous ne pouvez pas le faire de cette façon ...

Les énumérations ne sont pas évaluées par leur nom lors de la compilation. Vous devrez essayer quelque chose avec le préprocesseur. Vous pouvez créer une définition pour faire quelque chose de similaire. Quelque chose comme:

#define fn(x) enum_##x 

Et puis appelez

fn(x) 

Mais cela se produit lorsque le fichier est prétraité. Vous ne pouvez donc pas accéder aux variables d'exécution. A en juger par votre code, je ne pense pas que vous serez capable de faire ce que vous voulez. Bonne chance cependant.

+1

La gestion des noms ne s'applique pas aux valeurs d'énumération, ni au préprocesseur. C'est probablement l'astuce qu'il veut, cependant ... – Potatoswatter