2016-09-05 15 views
5

chcę zrobić klasę, która przechowuje wskaźników funkcji, ale gdy chcę je przechowywać w zmiennych składowych otrzymuję ten błąd:C++ Przypisywanie funkcji wskaźnik do innego

invalid use of member function (did you forget the '()' ?)

¿Gdzie jest moja błąd?

class Button { 
public: 
    Button(PS3USB * ps3, ButtonEnum button, void (*onPress)(void) = nullptr, 
      void (*onRelease)(void) = nullptr) { 
     PS3 = ps3; 
     status = false; 
     ERROR ---> onPressFunction = onPress; <--- ERROR 
     ERROR ---> onReleaseFunction = onRelease; <--- ERROR 
     id = button; 
    } 
    void check() { 
     if (PS3->getButtonClick(id) && !status) { 
      if (onPressFunction != nullptr) { 
       onPressFunction(); 
      } 
      status = !status; 
     } else if (!PS3->getButtonClick(id) && status) { 
      if (onReleaseFunction != nullptr) { 
       onReleaseFunction(); 
      } 
      status = !status; 
     } 
    } 
private: 
    bool status; 
    PS3USB * PS3; 
    ButtonEnum id; 
    void * onPressFunction(void); 
    void * onReleaseFunction(void); 

}; 

Dzięki

+0

można dodać na co linia pojawia się błąd? Również jeśli używasz C++ 11 powinieneś rzucić okiem na 'std :: function' zamiast surowych wskaźników funtion. – Hayt

+0

Powinieneś naprawdę użyć 'typedef' do swoich wskaźników funkcji. To rozwiązałoby również ten problem. Lub nawet użyj 'std :: function', jeśli możesz. – nvoigt

Odpowiedz

10
void * onPressFunction(void); 
void * onReleaseFunction(void); 

Są deklaracje funkcjonuje członkowskich, nie wskaźnik funkcji. Aby zadeklarować wskaźniki funkcjonować zamiast używać:

void (*onPressFunction)(void); 
void (*onReleaseFunction)(void); 
+0

Problemem był ten nawias, dzięki Serhio. –

2
void * onPressFunction(void); 
void * onReleaseFunction(void); 

Te powyżej nie deklaruje wskaźnik funkcji, ale tworzą funkcję składową każdego powracającego wskaźnik do pustki, myślę, że oznaczało to:

void (* onPressFunction)(void); 
void (* onReleaseFunction)(void); 

również dla wskaźników funkcji, polecam użyć typedefs lub std::function

typedef Przykład

typedef void(*onReleaseFunction)(void); 

i może być stosowany tak:

onReleaseFunction func = &functionname; 
+1

Jeszcze lepsza byłaby nowa składnia dla typedef: 'using onPressFunction = void (*)();' – Oktalist

+0

To jest dobry punkt @Oktalist –

Powiązane problemy