enum als Datentyp?



  • Hallo.
    Habe folgende Frage:
    Habe nen enum

    enum Inputdata {MOVE_UP, MOVE_DOWN, MOVE_RIGHT, MOVE_LEFT, FIRE};
    

    Nun kann ich ja eine Variable erstellen wie

    Inputdata Data = FIRE;
    

    Aber wie kann ich mein enum auch für Funktionen als Rückgabetyp nutzen?

    Inputdata GetInput(void);
    

    Da haut mit der Compiler immer Fehler raus: und sagt, er erkennt den Typ nicht:

    error C2143: Syntaxfehler: Es fehlt ';' vor 'Input::GetInput'
    error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

    Wie kann ich nun angeben, dass das mein Typ ist?
    typename ist so weit ich weiß ja nur für templates...

    Stehe gerade etwas auf dem Schlauch...

    MfG
    Hundefutter



  • Das geht schon. Zeig mal den umliegenden Code. Da stimmt was nicht.



  • Hast du das enum vor der Funktion deklariert? Der Typ muss zu dem Zeitpunkt natürlich bekannt sein...



  • Header:

    #ifndef INPUT_H_
    #define INPUT_H_
    
    #include <dinput.h>
    
    class Input
    {
    	public:
    
    		enum InputDevice {KEYBOARD, MOUSE};
    		enum Inputdata {MOVE_UP, MOVE_DOWN, MOVE_RIGHT, MOVE_LEFT, FIRE};
    
    		Input(HWND hWnd, HINSTANCE hInst, InputDevice Device);
    		~Input();
    		Inputdata GetInput(void);
    
    	protected:
    
    		void initKeyboard(HWND hWnd);
    		void initMouse(HWND hWnd);
    
    		Inputdata GetKeyboardInput(void);
    		Inputdata GetMouseInput(void);	
    
    		LPDIRECTINPUT8 m_DI;
    		LPDIRECTINPUTDEVICE8 m_DIDevice;
    
    		InputDevice m_CurrentDevice;
    };
    
    #endif /*INPUT_H_*/
    

    cpp-Datei:

    #include "Input.h"
    
    Input::Input(HWND hWnd, HINSTANCE hInst, InputDevice Device)
    {
    	m_DI = NULL;
    	m_DIDevice = NULL;
    
    	// create DirectInput8-Object
        if(FAILED(DirectInput8Create(hInst, DIRECTINPUT_VERSION, 
                                     IID_IDirectInput8,(void**)&m_DI,NULL)))
        { 
            // throw exception
        } 
    
    	// set device
    	m_CurrentDevice = Device;
    
        // init chosen device
        switch(m_CurrentDevice)
        {
            case KEYBOARD:
                    initKeyboard(hWnd);
                break;
            case MOUSE:
                    initMouse(hWnd);
                break;            
            default:
                    m_CurrentDevice = KEYBOARD;
                    initKeyboard(hWnd);
        }
    }
    
    Input::~Input()
    {
    
    }
    
    Inputdata Input::GetInput()
    {
    
    }
    
    void Input::initKeyboard(HWND hWnd)
    {
    
    }
    
    void Input::initMouse(HWND hWnd)
    {
    
    }
    

    Die Fehler gibt er mir in der cpp-Datei bei der entsprechenden Funktion an.

    MfG
    Hundefutter



  • Du hättest sagen können, dass sich das enum in einer Klasse befindet...

    Natürlich musst du in diesem Fall die Klasse mittels Scope-Operator :: angeben.



  • Alles klar, danke.
    Hatte mich auch schon stark gewundert, warum das nicht funktioniert hat.
    Aber klar, das hatte ich vergessen.

    Vielen Dank!

    MfG
    Hundefutter



  • Nexus schrieb:

    ...

    Mich intressiert wie es geht und habe nicht ganz genau verstanden wie du das mit dem :: Operator meinst. Kannst du vielleicht bitte ein Beispiel dazu machen wie das aus zu sehen hat? Wäre nett.

    fy



  • Input::Inputdata Input::GetInput() { ... }
    

    Nötig ist das, weil der Compiler, genauso wie wir Menschen, von links nach rechts und von oben nach unten arbeitet. Dadurch sieht er zuerst den Rückgabewert und dann erst, dass wir eine Methode der Klasse Input deklarieren. Wenn in einer Methode ein Parameter vom Typ Inputdata ist, braucht's das Input:: nicht:

    void Input::SetInput( Inputdata id ) { ... }
    


  • Alles klar, verstanden, danke !


Anmelden zum Antworten