vc6.0和vs2005中函数指针的区别

c72153770z 2009-02-27 09:34:47
在公用的define.h中如下定义:

typedef BOOL (*AAAA)(int i);

int BBBB(int a, AAAA isa)
{
......
}

在自己的类中 myclass.h :
#include "define.h"

class myclass
{
int HHHH(int a,int b);
int KKKK(int i);
}

int myclass::KKKK(int i)
{
......
}

int myclass::HHHH(int a,int b)
{
int num;
num= BBBB(a, KKKK);
}

请问为什么在vc6.0下没有问题,在vs2005下报错:
error C3867: myclass::KKKK: function call missing argument list; use '&myclass::KKKK' to create a pointer to member

改为
int myclass::HHHH(int a,int b)
{
int num;
num= BBBB(a, &KKKK);
}
后报错:error C2276: '&' : illegal operation on bound member function expression
请给位大侠不吝赐教,谢谢 !!!
...全文
211 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_S_D_N 2009-02-27
  • 打赏
  • 举报
回复
没有人想用模板?
c72153770z 2009-02-27
  • 打赏
  • 举报
回复
ok,谢谢大家!
oyljerry 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 c72153770z 的回复:]
能说说为什么vc6.0就没有问题,vs2005就不行的原因么?
[/Quote]
vs2005加强了语法检测等...vc6并不代表是对的
fbzok 2009-02-27
  • 打赏
  • 举报
回复
再说了,VC6里的这种写法确实看起来怪怪的。定义的是普通函数指针,现在却用于指向类的成员函数
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyljerry 的回复:]
定义为静态成员函数
static int myclass::KKKK(int i);
[/Quote]
这样应该可以了。
fbzok 2009-02-27
  • 打赏
  • 举报
回复
这是微软在设计上的改动,文档上提醒开发者留意需要使用 &Class::Method(...) 的方式,很多以前在VC6里的MFC工程拿到VS2005里编译,都要注意修改这种地方才能编译通过的
M_S_D_N 2009-02-27
  • 打赏
  • 举报
回复
用stl的mem_fun吧。
arong1234 2009-02-27
  • 打赏
  • 举报
回复
其实都是错的,只是vc6不严格,没报错
arong1234 2009-02-27
  • 打赏
  • 举报
回复
其实都是错的,只是vc6不严格,没报错
chenyingshu 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 c72153770z 的回复:]
引用 1 楼 hqin6 的回复:
C/C++ code

typedef BOOL (*AAAA)(int i);
aaaa是一个函数指针,你调用的时候,传过去的是一个类成员指针,所以,你的aaaa应该声明为类函数指针


怎么声明?我还要在其他的类里使用啊,并且我没有权利修改 typedef BOOL (*AAAA)(int i);啊!
[/Quote]
定义为静态成员函数
static int myclass::AAA(int i)
c72153770z 2009-02-27
  • 打赏
  • 举报
回复
能说说为什么vc6.0就没有问题,vs2005就不行的原因么?
dongpy 2009-02-27
  • 打赏
  • 举报
回复
KKKK是类非静态成员函数,要用类成员函数指针来访问。
waizqfor 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 c72153770z 的回复:]
引用 1 楼 hqin6 的回复:
C/C++ code

typedef BOOL (*AAAA)(int i);
aaaa是一个函数指针,你调用的时候,传过去的是一个类成员指针,所以,你的aaaa应该声明为类函数指针


怎么声明?我还要在其他的类里使用啊,并且我没有权利修改 typedef BOOL (*AAAA)(int i);啊!
[/Quote]
声明静态的函数成员 就可以了
oyljerry 2009-02-27
  • 打赏
  • 举报
回复
定义为静态成员函数
static int myclass::KKKK(int i);
c72153770z 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hqin6 的回复:]
C/C++ code

typedef BOOL (*AAAA)(int i);
aaaa是一个函数指针,你调用的时候,传过去的是一个类成员指针,所以,你的aaaa应该声明为类函数指针
[/Quote]

怎么声明?我还要在其他的类里使用啊,并且我没有权利修改 typedef BOOL (*AAAA)(int i);啊!
太乙 2009-02-27
  • 打赏
  • 举报
回复


typedef BOOL (*AAAA)(int i);

改为:

typedef BOOL (myclass::*AAAA)(int i);

其他也相应改改


太乙 2009-02-27
  • 打赏
  • 举报
回复


typedef BOOL (*AAAA)(int i);
aaaa是一个函数指针,你调用的时候,传过去的是一个类成员指针,所以,你的aaaa应该声明为类函数指针


65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧