首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过成员函数指针调用成员函数?

如何通过成员函数指针调用成员函数?
EN

Stack Overflow用户
提问于 2013-04-29 10:28:37
回答 4查看 11.9K关注 0票数 10

我想通过成员函数指针调用成员函数。调用函数也是成员。

代码语言:javascript
运行
复制
class A;

typedef int (A::*memFun)();

class A
{
    int P(){return 1;}
    int Q(){return 2;}
    int R(){return 3;}

    int Z(memFun f1, memFun f2)
    {
        return f1() + f2(); //HERE
    }
public: 
    int run();
};

int A::run()
{
    return Z(P, Q);
}

int main()
{
    A a;
    cout << a.run() << endl;
}

我做得不对,而且出错了-

代码语言:javascript
运行
复制
main.cpp:15:19: error: must use '.*' or '->*' to call pointer-to-member function in 'f1 (...)', e.g. '(... ->* f1) (...)'
         return f1() + f2(); //HERE

请展示正确的方法。

编辑-还有另一个错误,这是通过

代码语言:javascript
运行
复制
return Z(&A::P, &A::Q);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-29 10:30:20

代码语言:javascript
运行
复制
(this->*f1)() + (this->*f2)();

无论是否从类中调用它,都必须显式指定要调用的对象(在本例中为this)。还请注意所需的括号。以下是错误的:

代码语言:javascript
运行
复制
this->*f1() + this->*f2()
票数 18
EN

Stack Overflow用户

发布于 2013-04-29 10:29:46

如下所示:

代码语言:javascript
运行
复制
(this->*f1)() + (this->*f2)()
票数 4
EN

Stack Overflow用户

发布于 2013-04-29 10:34:40

虽然您没有显示它,但是在调用Z时很可能也会出现错误。

您需要像这样调用这个函数:

代码语言:javascript
运行
复制
Z(&A::P, &A::Q)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16276373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档