尝试调用功能指针到成员函数时会出现编译错误

Got compile error when trying to invoke function pointer to member functions

本文关键字:错误 编译 函数 成员 调用 功能 指针      更新时间:2023-10-16

我需要通过使用函数指针来调用成员函数,但我得到了编译错误

te5.cc:22:14: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘fp (...)’, e.g. ‘(... ->* fp) (...)’
     b.*fp(100);

这是代码段。任何想法如何使它起作用?

#include <stdio.h>
#include <string>
#include <stdio.h>
#include <string.h>
class A {
public:
    void dum1(int a) { printf("A::dum1(%d)n", a);}
    virtual void dum(int a) { printf("A::dum(%d)n", a);};
};
class B : public A {
public:
    B() {
    }
    void dum(int a) { printf("B::dum(%d)n", a);}
};
typedef void (A::*RUNFUNC)(int a);
RUNFUNC fp = &A::dum; //, &A::dum};
int main (int argc, char *argv[]) {
    B b;
    b.*fp(100);
    return 0;
}
b.*fp(100);

错误的语法,应该是(因为.*的优先级低于()

(b.*fp)(100);

运算符优先级要求您在指针向成员的应用程序应用周围放置括号,并调用。这样:

(b.*fp)(100);

否则,将其解析为b.*(fp(100))。愚蠢,但这是规则。