首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-05 
关于函数指针的赋值class A{typedef int (A::*PFUNC)(int)PFUNC *p1void init()int f1(int)int f2(int

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

热点排行