C++将函数指针赋值给另一个函数指针

5

我想创建一个存储函数指针的类,但当我想将它们存储在成员变量中时,出现了以下错误:

无效使用成员函数(您是否忘记了“()”?)

我的错误在哪里?

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

};

谢谢


你能告诉我错误出现在哪一行吗?另外,如果你使用c++11,应该看看std::function而不是裸函数指针。 - Hayt
你应该为函数指针使用 typedef。这也可以解决这个问题。如果可能的话,甚至可以使用 std::function - nvoigt
2个回答

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

这些是成员函数的声明,而不是函数指针。如果要声明指向函数的指针,请使用以下语法:

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

问题就在那些括号里,谢谢Serhio。 - Oscar Garcia Lorenz

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

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

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

此外,对于函数指针,我建议您使用typedefsstd::functiontypedef示例
typedef void(*onReleaseFunction)(void);

它可以像这样使用:

onReleaseFunction func = &functionname;

1
更好的方式是使用新的typedef语法:using onPressFunction = void (*)(); - Oktalist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接