标题:VC++中的一个指针调用函数的问题
只看楼主
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
结帖率:100%
已结贴  问题点数:20 回复次数:6 
VC++中的一个指针调用函数的问题
class Test
{
   
public:
    void (test::*fp)(void);   
    void fun()
    {
        printf("Test fun \n");
        return ;
    }
     

    void init()
    {        
        fp=fun;        
        return ;

    }
};
main()
{
  Test t;
  t.init();
  t.fp();//////这里编译出错error C2064: term does not evaluate to a function
}
我要如何才能通过指针去调用fun函数
搜索更多相关主题的帖子: public void function return 
2012-10-21 14:51
JYIT
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:101
注 册:2012-10-17
得分:0 
void (test::*fp)(void);   
没必要加test::
改为void (*fp)(void);   
2012-10-21 16:28
lchpersonal
Rank: 2
等 级:论坛游民
威 望:1
帖 子:34
专家分:81
注 册:2012-7-27
得分:10 
class Test
{
   
public:
    void (test::*fp)(void);   //函数指针??? 很少有这样用的吧!  
    void fun()
    {
        printf("Test fun \n");
        return ;
    }
     

    void init()
    {        
        fp=fun;        
        return ;

    }
};
main()
{
  Test t;
  t.init();
  t.fun();//////这样直接调用不行吗??
}


如果非得用指针的话如下:
main(){
Test *t=new Test();
t->init();
t->fun();

重剑无锋,大巧不工
2012-10-21 16:33
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
得分:0 
不行,你去掉test::
  void init()
{
   fp=fun;不行。//error C2440: '=' : cannot convert from 'void (__thiscall test::*)(void)' to 'void (__cdecl *)(void)'
   return ;
}
2012-10-21 16:36
JYIT
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:101
注 册:2012-10-17
得分:10 
以下是引用风之子MIKEY在2012-10-21 16:36:28的发言:

不行,你去掉test::
  void init()
{
   fp=fun;不行。//error C2440: '=' : cannot convert from 'void (__thiscall test::*)(void)' to 'void (__cdecl *)(void)'
   return ;
}
下面的当然也要相应改,改为fp=(&fun);
2012-10-21 16:43
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
得分:0 
class Test
{
   
public:
    void (test::*fp)(void);   
    void fun()
    {
        printf("Test fun \n");
        return ;
    }
     

    void init()
    {        
        fp=fun;  
            
        return ;

    }
};
main()
{
  Test t;
  t.init();
  t.fp();//////这里编译出错error C2064: term does not evaluate to a function
  改为:(t.*t.fp)();就可以啦。
}
找了很久才找到。
2012-10-21 17:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
我不知道你想干什么,我只把你错误的地方改正过来
#include <cstdio>

class Test
{
public:
    void (Test::*fp)(void);
    void fun()
    {
        printf("Test fun \n");
        return;
    }
    void init()
    {        
        fp = &Test::fun;
        return;
    }
};
int main()
{
    Test t;
    t.init();
    (t.*t.fp)();

    return 0;
}
2012-10-22 08:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-383728-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.130629 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved