J'ai deux énumes, et s'il y a une valeur dans une enum avec le même nom qu'une valeur dans l'autre Enum: Le compilateur (Visual Studio's) se plaint de la redéfinition de Toute perspective aiderait. p> p> Doc CODE>, qui l'implique qu'il la traite comme une variable globale. Est-ce vrai? Ce n'est pas le comportement que j'attendrais et cela me force à gérer des noms de tous les éléments énumants de mon projet. P>
7 Réponses :
Les énumérateurs en C ++ 03 ont la même portée que l'énumération.
enum xxx { yyy, zzz }; ^ ^ ^ enumeration enumerator enumerator
Les valeurs de l'ENum ont la portée de l'ENUM elle-même, c'est-à-dire que c'est une portée de déclaration. Par exemple: x sera 32. P> p>
Nope, mais vous aurez 11 erreurs dans votre code. Essayez de le compiler
Mais si vous changez Enum 1 code> à
Enum A code> et
Enum 2 code> à
Enum b code> Le code va compiler et vous allez toujours montrer la portée. Gagnant-gagnant?
Les valeurs d'une énumération existent dans n'importe quelle portée le Les travaux suivants, par exemple: P> Enum code> a été déclaré dans.
class A_class { enum A {joe, bob, doc}; };
class B_class { enum B {sunday, monday, doc}; };
Si vous voulez qu'ils soient globaux, corrigez votre problème et évitez la pollution des espaces de noms en lançant votre Enum code> S dans un espace de noms:
namespace A
{
enum A {joe, bob, doc};
}
namespace B
{
enum B {sunday, monday, doc};
}
A::doc;
B::doc;
Il n'est pas traité comme une variable globale em>. Il est traité comme un identifiant em> global em>. plus précisément, il est traité comme un identifiant dans tout espace de noms que le Pour une idée de la différence entre un identifiant global et une variable globale, essayez de prendre l'adresse de votre énum. ;) p> Habituellement, lorsque je définirai Enums, je prépends la version abrégée du nom de l'identifiant. Comme ceci: p> Ceci aide à éviter les collisions. P> P> Enum code> est déclaré dans votre cas. Dans votre cas, c'est l'espace de noms global. P>
J'allais rire durement si de toutes les réponses à cette question à cette question n'avait pas répondu au problème de la variable. +1
J'ai senti que "variable" n'est pas le bon terme, mais je n'en ai pas eu de meilleur (maintenant j'ai ...)
Wyatt Anderson a déjà suggéré
A::doc; B::doc;
Disons que nous voulons déclarer le rapport de format pour une fenêtre graphique. Ensuite, définissez les valeurs ENUM comme déjà suggéré:
enum class values { ASPECT_RATIO_16_9, // HD video ASPECT_RATIO_16_2, // *for testing purposes* ASPECT_RATIO_4_3, // standard monitor ASPECT_RATIO_3_2, // classic film ASPECT_RATIO_21_9, // cinemascope ASPECT_RATIO_1_1 // quadratic window };
Pourrions-nous voir plus de code? Peut-être que le problème est quelque chose autour.
Ce n'est pas un comportement normal du compilateur, Afaik.
Désolé, je ne le savais pas! Et c'est pareil pour c?
@YKATCHOU: Cela se produit si les deux lignes ci-dessus sont les seules lignes du fichier CPP étant compilées.