Frage zur Initialisierung eines enum-Typs in Konstruktorliste



  • Wer kann folgende Situation erklären?

    class Muster
    {
    public:
    enum Wert{eins=1,zwei,drei};

    Wert iWert;
    //Konstruktor
    Muster(Wert aWert):iWert(aWert){}
    };

    int main()
    {
    Muster::Wert undefinierterWert;
    Muster Test(undefinierterWert); //Objekt wird erzeugt
    cout<<Test.iWert;
    }

    Dieser Code läßt sich ohne weiteres Kompilieren.
    Problem ist aber nun, dass die member Variable iWert der Klasse Muster einen Zufallswert hat, obwohl man ja mit einem Enum einen bestimmten Wertebereich sicherstellen will.
    Dabei stellt sich für mich die Frage, wie eine Konstruktorliste funktioniert? Ist es eine normale Initialisierung?



  • Du erstellst einen undefinierten Wert und weisst diesen Wert an eine Variable zu und wunderst dich, dass die Variable dann einen undefinierten Wert hat?

    Warum wundert dich das?



  • Es wundert mich nicht der undefinierte Wert,
    sondern die Tatsache, dass sich die member Variabe iWert mit diesem Wert initialisieren lässt, da iWert ja ein enum Typ ist.

    Wenn man den Konstruktor so definiert:

    Muster(Wert aWert)
    {
    iWert=aWert;
    }

    dann wirft der Compiler einen Fehler aus, weil iWert eben nur mit bestimmten Werten initialisiert werden darf.



  • Hier arbeitet automatishe Typ-Konvertierung



  • SliderMax schrieb:

    Es wundert mich nicht der undefinierte Wert,
    sondern die Tatsache, dass sich die member Variabe iWert mit diesem Wert initialisieren lässt, da iWert ja ein enum Typ ist.

    Ja und? dein undefinierter Wert ist ja ein enum - somit ist für den COmpiler alles klar. Woher er soll zur Compiletime wissen, welchen Wert das enum dann zur Laufzeit haben wird?

    Wenn du das Warning Level bei deinem Compiler hoch stellst, wirst du vermutlich eh eine Warnung alle "Variable ohne initialisierung verwendet" bekommen. mehr kann der compiler nicht tun.

    ein enum wird ja im code als int repräsentiert - dh das enum existiert nur zur compilezeit.



  • Ja, das klingt logisch und leuchtet mir ein.
    Danke


Anmelden zum Antworten