Gleicher Name in zwei verschiedenen Enums



  • Hallo,

    wieso kann ich keine zwei Enums anlegen, in denen sich ein oder mehrere Namen wiederholen?
    Ein allgemeines Beispiel:

    enum EWoche { MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG };
    
    enum EWochenEnde { SAMSTAG, SONNTAG };
    

    Ich will halt verschiedene Enums anlegen, die alle OK=0 haben und die anderen Werte sich dann unterscheiden. Wie kann ich es machen, ohne jedes Enum in einem eigenem Struct anzulegen?

    Danke.



  • Hallo,
    die Konstanten einer Aufzählung liegen im Scope in der die Aufzählung definiert wird. Eine Aufzählung führt also im Gegensatz zu einer Klasse keinen eigenen Scope ein.

    In deinem Beispiel definierst du zwei Aufzählungen im globalen Scope. Die Konstanten der Aufzählungen liegen also ebenfalls dort. Logischerweise kannst du im selben Scope aber nicht zwei unterschiedliche Konstanten mit dem selben Namen haben. Wie sollte man die unterscheiden?

    Wie kann ich es machen, ohne jedes Enum in einem eigenem Struct anzulegen?

    Die Alternative wäre jede Aufzählung in einen eigenen Namensraum zu packen. Was spricht gegen den struct-Ansatz?



  • Vielen Dank für die schnelle Antwort.

    Werde es mit struct machen. Mir kam diese Lösung programmtechnisch nicht so sauber vor.

    Danke nochmal.

    Gruß
    Marius



  • Du kannst auch Namenraeume benutzen als folgendes:

    namespace EWoche1 {
      enum EWoche { MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG };
    
    }
    namespace EWoche2 {
      enum EWochenEnde { SAMSTAG, SONNTAG };
    }
    ...
    EWoche1::EWoche t = EWoche1::MONTAG;
    oder
    {
     using namespace EWoche1;
      EWoche t = MONTAG;
    }
    

Anmelden zum Antworten