尝试调用成员函数的函数指针时出现编译错误

时间:2016-12-25 20:49:38

标签: c++

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

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

2 个答案:

答案 0 :(得分:4)

b.*fp(100);

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

(b.*fp)(100);

答案 1 :(得分:3)

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

(b.*fp)(100);

否则,它被解析为b.*(fp(100))Silly, but those are the rules