指向函数编译错误的指针

时间:2017-06-03 04:03:55

标签: c++

我试图使用上面函数的指针来调用函数,但是它一直显示这个错误:表达式调用的括号前面的表达式必须具有(指向 - )函数类型。有什么帮助吗?

    #include<iostream>
using namespace std;
class a
{
public:
    a(){}
    int f(float m){cout<<"called.\n";return 1;}
};

int main()
{
    int (a::*ptr2)(float m) = &a::f;
    a *p ,obj;
    p = &obj;
    obj.*ptr2(.8);
    p->*ptr2(.5);
}

1 个答案:

答案 0 :(得分:2)

你只是在函数指针调用周围缺少一些括号。

#include<iostream>

class a
{
public:
    a(){}
    int f(float m) {
        std::cout<<"called."<<std::endl;
        return 1;
    }
};

int main()
{
    int (a::*ptr2)(float m) = &a::f;
    a *p ,obj;
    p = &obj;
    (obj.*ptr2)(.8); //note the difference
    (p->*ptr2)(.5);
}

在这种情况下,std::invoke可以非常方便: std::invoke Reference