c++ - 尝试调用成员函数指针将不起作用

标签 c++ function class pointers

我知道成员函数指针有点棘手,如果函数指针不是类本身的成员,我可以调用它,但如果它是类的成员,我似乎无法调用它:

struct Window
{
    virtual void handleEvent() {};
    void (Window::*pHandleEvent)();
};

int main()
{
    Window w;
    void (Window::*fnptr)() = &Window::handleEvent;
    (w.*fnptr)(); // Works fine calling a local func ptr
    w.pHandleEvent(); // Calling its own member pointer doesn't work
    // Err: Expression preceding parentheses of apparent call must have
    // (pointer-to) function type
    (w.*pHandleEvent)();    // Doesn't work
    //Err: identifier "pHandleEvent" is undefined
    (w.*Window::pHandleEvent)();    // Doesn't work.
    // Err: A non-static member reference must be relative to a specific object.
}

最佳答案

您需要指定两个 Window 对象:一个要使用其指针,另一个要在其上调用方法。如果它们相同,则为

(w.*w.pHandleEvent)();

请注意优先级:如果您有 A Window::*ptm; 并且想要 A 对象的成员,则它是 (w.*ptm ).a_member.

关于c++ - 尝试调用成员函数指针将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494079/

相关文章:

javascript - 简单的 jQuery 函数在 for 循环后仅返回零

java - 接口(interface)方法的使用(Java)?

c++ - 有效的 C++03 模板代码无法在 C++11 中编译

c++ - 为什么 clang -Wunused-member-function 不警告未使用的成员函数?

C++:使用 longjmp 和 setjmp 安全吗?

python - 如果每个函数都没有抛出任何错误,则按顺序运行 python 函数

C++:如何制作作为引用返回的 char 的拷贝?

ios - 在 Swift 中,如何编写一个函数在完成后触发另一个函数?

php - 在php中使用静态类变量作为类名调用静态方法

eclipse - 如何从 Eclipse 中的文件搜索中排除 .class 文件?