免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8800 | 回复: 11
打印 上一主题 下一主题

[C++] 求助:怎么调用一个指向类成员函数的函数指针指向的函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-29 15:48 |只看该作者 |倒序浏览
求助:怎么调用一个指向类成员函数的函数指针指向的函数?

  1. class TTest
  2. {
  3. public:
  4.     void (TTest::*pfun)(void);   
  5. //定义一个函数指针,使之指向void TTest::fun() 类型的函数
  6.    
  7.    
  8.    void test();
  9.     void fun(void);

  10. };

  11. void TTest::fun()
  12. {
  13. }

  14. void TTest::test()
  15. {
  16.    pfun=fun;   

  17.    pfun();         //错误                  
  18.    (* pfun)();   //错误
  19.    this->pfun(); //错误
  20.    (this->pfun)();  //错误
  21.    *(this->pfun)();  //错误
  22.    (*(this->pfun))();  //错误


  23. }
复制代码

[ 本帖最后由 ATmega32 于 2008-1-29 16:08 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-29 16:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2008-01-29 16:21 |只看该作者
pfun=&TTest::fun;
   pfun();  //Error[Pe109]: expression must have (pointer-to-) function type

还是不行

论坛徽章:
0
4 [报告]
发表于 2008-01-29 16:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2008-01-29 16:32 |只看该作者
to 楼上

pfun=&TTest::fun;  
没有错误,

是调用pfun指向的函数出错。
   pfun();         //错误                  
   (* pfun)();   //错误
   this->pfun(); //错误
   (this->pfun)();  //错误
   *(this->pfun)();  //错误
   (*(this->pfun))();  //错误

编译器用的是IAR,
等下试试GCC。

论坛徽章:
0
6 [报告]
发表于 2008-01-29 16:40 |只看该作者
多谢了。
用static好了。

IAR和GCC编译通过。

论坛徽章:
0
7 [报告]
发表于 2008-01-29 16:44 |只看该作者
这样子就可以了。

#include <iostream>

class TTest
{
public:
    void (TTest::*pfun)(void);
   
    void test();
   
    void fun(void);
};

void TTest::fun()
{
    std::cout << "TTest::fun()" << std::endl;
}

void TTest::test()
{
   pfun = &TTest::fun;
   (this->*pfun)();
}

int main()
{
    TTest* t(new TTest);
    t->fun();
    t->test();
    delete t;
     
    return 0;
}

论坛徽章:
0
8 [报告]
发表于 2008-01-29 16:50 |只看该作者
再次感谢楼上

论坛徽章:
0
9 [报告]
发表于 2008-01-29 17:10 |只看该作者
C++关于成员函数指针的语法和原理让人费解了. 我倒希望它这样:

void (*pfun)();
pfun = this->fun;
pfun();

[ 本帖最后由 ideawu 于 2008-1-29 17:12 编辑 ]

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
10 [报告]
发表于 2008-01-29 19:54 |只看该作者
原帖由 ideawu 于 2008-1-29 17:10 发表
C++关于成员函数指针的语法和原理让人费解了. 我倒希望它这样:

void (*pfun)();
pfun = this->fun;
pfun();


也许下一版  C++ 会支持委托(Delegate),那是面向对象的函数指针。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP