enum-wert und integer



  • Hallo.
    Folgendes will ich machen:

    #define ANZAHL_DER_KEYCODES 1234
    
    enum KEYCODE
    {
      KEY_ESCAPE = 0x00,
      KEY_X = 0x01,
      KEY_Y = 0x02 /*usw.*/
    }
    
    bool isKeyPressed(KEYCODE key);
    
    int main()
    {
        for(int i = 0; i < ANZAHL_DER_KEYCODES; ++i)
        {
            if(isKeyPressed(i)) doSomething();
        }
    
    }
    

    Will also die Enum durch ne Ineger ersetzen.

    Leider klappt das nicht. Ich hab auch "isKeyPressed(KEYCODE(i))" und "isKeyPressed(static_cast<KEYCODE>(i))" probiert, aber ohne Erfolg. Wie erziele ich das gewünschte Resultat? Die Funktion isKeyPressed ändern kommt nicht in Frage. Die ist aus einer Bibliothek, habe auch nur Zugriff auf die Header. Wollte eine schöne Input-Klasse mit netter Funktionalität bauen (KeyRepeatRate etc.)



  • WhoTheFuck? schrieb:

    Folgendes will ich machen:

    #define ANZAHL_DER_KEYCODES 1234
    
    enum KEYCODE
    {
      KEY_ESCAPE = 0x00,
      KEY_X = 0x01,
      KEY_Y = 0x02 /*usw.*/
    }
    
    bool isKeyPressed(KEYCODE key);
    
    int main()
    {
        for(int i = 0; i < ANZAHL_DER_KEYCODES; ++i)
        {
            if(isKeyPressed(i)) doSomething();
        }
    
    }
    

    Will also die Enum durch ne Ineger ersetzen.

    Leider klappt das nicht. Ich hab auch "isKeyPressed(KEYCODE(i))" und "isKeyPressed(static_cast<KEYCODE>(i))" probiert, aber ohne Erfolg.

    Was heißt "ohne Erfolg" genau? Beide Konvertierungen sind legales C++ und sollten sich dementsprechend problemlos übersetzen lassen. Was sagt dein Compiler denn genau?



  • Der Compiler meckert nicht, aber isKeyPressed liefert in jeder Variante false zurück. Beim direkten Eintrag von enum-Werten funktionierts aber ohne Probleme.



  • schreib mal in die schleife nicht ++i sondern i++ vllt gehts dann 😛 bin zwar kein anfängern mehr da ich ja schon WinAPI/Dll code aber schaden kanns nicht 😉



  • MartinMilbret schrieb:

    schreib mal in die schleife nicht ++i sondern i++ vllt gehts dann 😛 bin zwar kein anfängern mehr da ich ja schon WinAPI/Dll code aber schaden kanns nicht 😉

    Quark.



  • was macht isKeyPressed() denn? wird irgendwo nen tastendruck abgefragt? dein code iteriert einmal über 1024 "zeichen" und ruft die funktion auf. solange die funktion isKeyPressed() selbst nicht irgendwas abfragt, "blockiert" deine schleife den programmfluss und es wird natürlich auch nix zurückliefern.



  • Der static_cast hätte klappen müssen. Wie sah da die Fehlermeldung aus?


Anmelden zum Antworten