C++ Enumerator

Gast #5531039
Lesenswert?

Hallo,

wieso geht das nicht in C++?
1
enum e_1 {Hund};
2
enum e_2 {Hund};
3

4
:
5

6
e_1 var1 = e_1::Hund;
7
e_2 var2 = e_2::Hund;

Schon bei der Enum Deklaration gibt der Compiler mir eine Fehlermeldung.
"'Hund': redefinition; previous definition was 'enumerator'"

Selbst untere Schreibweise sollte doch eindeutig auflösbar sein für den 
Compiler.
1
enum e_1 {Hund};
2
enum e_2 {Hund};
3

4
:
5

6
e_1 var1 = Hund;
7
e_2 var2 = Hund;

Ich sage doch mit der Deklaration prinzipiell dem Compiler, die 
Enumeration (Aufzählungstyp) e_1 darf nur all die Werte in der 
geschweiften Klammer annehmen und für die Enumeration e_2 sind eben nur 
die Werte in der geschweiften Klammer hinter e_2 erlaubt.

Weiter unten sage ich dann die Variable var1 vom Typ e_1 hat den Wert 
Hund.
e_1 var1 = Hund;

Wieso bringt mir VS C++ hier diese Fehlermeldung?
#5531076
Lesenswert?

namespace n1 {
  enum e1 {
    Hund
  };
}

namespace n2 {
  enum e2 {
   Hund
  };
}

int main() {
  n1::e1 x = n1::e1::Hund;
  n2::e2 y = n2::e2::Hund;
  if (x == y) printf("Na Holla die Waldfee!");
  return 0;
}

Das baut zumindest. Mir erschliesst sich aber
nicht der Sinn, 2 Konstanten, die miteinander
nichts gemein haben, den gleichen Namen zu geben ;)

merciless
Gast #5531197
Lesenswert?

Dirk K. schrieb:
> Das baut zumindest. Mir erschliesst sich aber
> nicht der Sinn, 2 Konstanten, die miteinander
> nichts gemein haben, den gleichen Namen zu geben ;)

In größeren Projekten kommt sowas schon mal vor. Dann verpackt man die 
Enums in verschiedene Namespaces (wie Du ja grad gezeigt hast) oder in 
verschiedene Klassen oder nimmt die von Niklas schon erwähnte 'enum 
class' Variante.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren