关于函数指针的赋值
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;
试试
函数名会自动转成函数指针
试试吧