游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2212|回复: 5

在类中的函数指针问题

[复制链接]

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
发表于 2007-10-6 16:24:00 | 显示全部楼层 |阅读模式
代码如下:
//////////////////////////
class Base
{
public:
        void Go(void (*Fun)())
        {
                Fun();
        }
        void Funtion()
        {
                cout<<"Funtion called"<<endl;
        }
};

void main()
{
        Base a;
        a.Go(a.Funtion);
       
}

///////////////////////////////////////////
Vs2003报错如下:
e:\我的工作空间\临时试验区\类取得私有数据.cpp(22) : error C2664: “Base::Go” : 不能将参数 1 从“void (void)”转换为“void (__cdecl *)(void)”



求解~

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-10-6 22:49:00 | 显示全部楼层

Re:在类中的函数指针问题

ding qi

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-7 00:54:00 | 显示全部楼层

Re:在类中的函数指针问题

因为类函数调用时,会用到对象的this指针(x86的CPU是放入ECX),所以和你的函数指针void (*Fun)()不是一个类型,普通函数调用不需要this指针。也就是说你这么写行不通。

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-10-7 08:17:00 | 显示全部楼层

Re:在类中的函数指针问题

那有什么解决办法?

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-10-8 16:02:00 | 显示全部楼层

Re:在类中的函数指针问题

类成员函数和普通函数是不相同的。

你那个类型是
void Base:void);
用指向成员的指针:
void (Base::*)(void);


void Go (void (Base::*pFun)(void), Base *b)//接口
{
        (b->*pFun)();//调用,注意需要小括号
}


Go( &Base::Funtion, &a ); //使用, 注意是取 类型::函数, 而不是 对象.函数,后面还需要一个对象指针
         

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-10-9 22:58:00 | 显示全部楼层

Re:在类中的函数指针问题

嗯,谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 19:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表