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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.