读书人

关于函数指针的赋值解决思路

发布时间: 2012-02-05 12:07:14 作者: rapoo

关于函数指针的赋值
class A
{
typedef int (A::*PFUNC)(int);
PFUNC *p1;
void init();
int f1(int);
int f2(int);
...
};

void A::init()
{
int t=2;
p1=new PFUNC [t];

p1[0]=&A::f1;
p1[1]=&A::f2;
}

程序运行没有问题,但调试的时候,发现p1[0]的值为:f1的地址,而p1[2]的为f2的地址,p1[1]显示0x000000
我又单独写了个程序,调试时没有发现问题,想请问各位高手,引起这种现象的原因是什么啊?源程序太大,不知道从何找起.
源程序很大,如有需要,我将直接传给各位.

[解决办法]

你是怎么获取p[1]的值的?因为对成员函数指针的大小,不一定是4的,有可能是16,这是编译器的问题,

如果你要确保他是4,要加上__single 关键字,具体我没有用过,你可以试试

所以你先用cout << (int)p[1]; 输出看一下
[解决办法]
p1[0]=&A::f1;
p1[1]=&A::f2;
改成
p1[0]=A::f1;
p1[1]=A::f2;
试试
函数名会自动转成函数指针
试试吧

读书人网 >C++

热点推荐