C ++将函数指针指向另一个

时间:2016-09-05 12:06:23

标签: c++ pointers

我想做一个存储函数指针的类,但是当我想将它们存储在成员变量中时,我得到了这个错误:

  

无效使用成员函数(你忘了'()'吗?)

¿我的错误在哪里?

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);

};

由于

2 个答案:

答案 0 :(得分:10)

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

这些是成员函数的声明,而不是函数指针。要声明指向函数的指针,请使用:

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

答案 1 :(得分:2)

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

以上这些都没有声明一个函数指针,但它们创建了一个成员函数,每个函数返回一个指向void的指针,我想你的意思是:

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

另外,对于函数指针,我建议你使用typedefsstd::function

Typedef示例

typedef void(*onReleaseFunction)(void);

它可以像这样使用:

onReleaseFunction func = &functionname;