Enumeration



  • Hallo Leute,

    ich möchte ein Programmm schreiben, in welchen eine Funktion ein Element einer Aufzählung als Eingangsvariable verwendet, den Wert dieser Elements mit 2 multipliziert und wieder zurückgibt. In meinen derzeitigen Programm werden nur Fehlermeldungen ausgespuckt, was mache ich verkehrt? Vielen Dank für eure Hilfe!

    Quellcode:

    class demo
    {

    public:
    enum ModeEnum{MODE_OFF,MODE_UNCTROLLED};

    ModeEnum Mode;

    int GetMode(MODE_OFF){
    return 2*MODE_OFF;
    }
    };

    int main()
    {
    demo P;

    P.GetMode(MODE_OFF);

    return 0;
    }



  • Was sagen denn die Fehlermeldungen?



  • Eine Funktion schaut so aus: Rückgabedatentyp Funktionsname( Parameterdatentyp Parametername ) Und jetzt schau mal, was du gemacht hast.



  • @C++Pete
    MODE_OFF verhält sich zu ModeEnum wie 0 zu int .

    Würdest du auf die Idee kommen eine Funktion mit int GetMode(0) definieren zu wollen?
    Falls nicht: wieso meinst du dann dass int GetMode(MODE_OFF) funktionieren sollte?



  • Meinen derzeitiger Quelltext sieht jetzt wie folgt aus:

    class demo
    {

    public:
    enum ModeEnum{MODE_OFF,MODE_UNCTROLLED};

    ModeEnum Mode;

    int GetMode(enum MODE_OFF){
    return 2;
    }
    };

    int main()
    {
    demo P;

    P.GetMode(0);

    return 0;
    }

    Jetzt liefert mir der Compiler die Fehlermeldung zum Aufruf der Funktion
    im Main-Teil:

    error C2664: 'demo::GetMode': Konvertierung des Parameters 1 von 'int' in 'MODE_OFF' nicht möglich
    1> Konvertierung in einen Enumerationstypen erfordert explizite Typumwandlung (static_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Was muss ich es umschreiben? Vielen Dank für eure Hilfe!



  • ohoh, ich glaube, du musst das Kapitel Funktionen nochmals lesen. Fangen wir mal mit einer kleinen Übung an. Sag mir mal, wie die Signatur einer Funktion prinzipiell aussieht.



  • Rückgabetyp Funktionsname(Parameterliste)
    {
    Anweisungen
    }



  • MODE_OFF ist ein Wert kein Funktionsparameter.

    int GetMode(enum MODE_OFF)
    

    Falsch.



  • C++Pete schrieb:

    Rückgabetyp Funktionsname(Parameterliste)
    {
    Anweisungen
    }

    Richtig. Wie schaut denn so eine Parameterliste genau aus? Also die Bestandteile?



  • Parameterliste: (Parameterdatentyp Parameterwert, Parameterdatentyp1 Paramaeterwert1...)



  • Kleiner Tipp am Rande...

    int GetMode(ModeEnum MODE){ 
    return 2;
    }
    


  • Vielen Dank für deine Antwort...wie gestalet sich der Aufruf der Funktion im Main-Teil über das Objekt P?

    P.GetMode(0); bzw. P.GetMode(ModeEnum)

    funktioniert leíder nicht.



  • Fexis schrieb:

    Kleiner Tipp am Rande...

    int GetMode(ModeEnum MODE){ 
    return 2;
    }
    

    Jetzt hast du meine Unterrichtsstunde kaputt gemacht. 😞



  • Jetzt hast du meine Unterrichtsstunde kaputt gemacht. 😞

    sry, aber ich konnte einfach nicht mehr anders 🙄

    P.GetMode(0); bzw. P.GetMode(ModeEnum)
    

    ...was du übergeben musst ist die Variable, nicht den Typen.
    Du deklarierst ja nicht, du übergibst!

    P.GetMode(demo::ModeEnum::MODE_OFF)
    

    ODER:

    P.GetMode(P.Mode)
    

    Wenn du die erste Variante benutzen möchtest, kannst du getrost deine Variable Mode aus der Klasse demo entfernen



  • Besten Dank!



  • Fexis schrieb:

    Jetzt hast du meine Unterrichtsstunde kaputt gemacht. 😞

    sry, aber ich konnte einfach nicht mehr anders 🙄

    Lass es.
    Jede Antwort die du ihm gibst führt zu 2 neuen Fragen.
    Was ja noch OK ist, so lange er sich die Antworten auf durchschnittlich > 1 dieser Fragen selbst ergoogeln würde.


Log in to reply