mit enum class prüfen



  • Hallo,

    ich habe folgendes Problem:

    Es wird leider der Status einer enum class Instanz nicht geprüft. Folgender Auszug aus dem Programm soll das verdeutlichen (Namen wurden zwecks Übersicht geändert):

    System::Random ^ rand = gcnew System::Random();
    
    enum class Die Enumklasse
    {
    	Status1, Status2
    };
    
    ...
    
    Enumklasse ^ EnumInstanz;
    
    EnumInstanz = (Enumklasse) rand->Next(0, 2);
    
    if(EnumInstanz == Enumklasse::Status1)
    {
    MessageBox::Show("korrekt!")
    }
    else if(EnumInstanz == Enumklasse::Status2)
    {
    MessageBox::Show("korrekt!")
    }
    else
    MessageBox::Show("nicht korrekt!");
    
    MessageBox::Show(Convert::ToString(EnumInstanz));
    

    Der Code lässt sich zwar kompilieren, aber es sollte eigentlich eine der beiden ersten if-Abfragen ausgeführt werden, anstatt der else-Abfrage. Die letzte MessageBox zeigt, dass der EnumInstanz ein Wert zugeordnet wurde (Status1, oder Status2), aber die beiden ersten if-Abfragen werden trotzdem nicht ausgeführt. Was mache ich falsch?

    (Klar könnte ich statt enum, int benutzen, aber enum ist in diesem Fall doch praktischer, als eine Zahl, weil der Status in dem Programm noch öfter benutzt wird, und enum doch aussagekräftiger ist 😉 )



  • Du hast hier eine Referenz auf das Enum angelegt... Du solltest aber das Enum direkt ansprechen...
    Wenn Du mit einer Zahl arbeitest, verwendest Du ja auch keine Referenz...

    Also:
    [cli]System::Random ^ rand = gcnew System::Random();
    Enumklasse EnumInstanz;
    EnumInstanz = (Enumklasse) rand->Next(0, 2);

    if(EnumInstanz == Enumklasse::Status1)
    {
    MessageBox::Show("korrekt!");
    }
    else if(EnumInstanz == Enumklasse::Status2)
    {
    MessageBox::Show("korrekt!");
    }
    else
    MessageBox::Show("nicht korrekt!"); [/cli]



  • Das Dächlein braucht man also nur wenn man eine Referenz auf eine zu erstellende Instanz einer Klasse legt?



  • Enums sind keine Klassen sondern ein Value-type und somit braucht man hier nie ein "Dächlein"...


Anmelden zum Antworten