关于函数传址的问题!

mero 2003-08-01 07:26:41
代码如下:

CMyDoc* pDoc = GetDocument();
typedef int (* MyFunction)(int a,int b);
MyFunction pFunction=(MyFunction) pDoc->teach;
int i=pFunction( 6 , 9 );

为什么编译不过去呢?他老是说: error C2440: 'type cast' : cannot convert from '' to 'int (__cdecl *)(int,int)'
...全文
33 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangchaobj 2003-08-01
  • 打赏
  • 举报
回复
引用类中的函数比较麻烦,要涉及到this指针的传递。
不如用static修饰副。

要不就放到全局。
mero 2003-08-01
  • 打赏
  • 举报
回复
还有别的解决方法吗?
mero 2003-08-01
  • 打赏
  • 举报
回复
呵呵,是呀!
他为什么会是void (__cdecl * __cdecl test)(int)?
titi_lima 2003-08-01
  • 打赏
  • 举报
回复
举个例子,假设有如下类:
class CTest
{
public:
int x;
void func(int a);
};
那么,你是不能通过定义一个
typedef void (* test)(int);
的函数指针来取得func的地址并调用之的,因为test类型是void (__cdecl * __cdecl test)(int),而CTest::func是一个成员函数,它的类型是void __thiscall CTest::func(int),这就导致了类型不匹配。
解决的办法就是将func声明为static类成员函数。
mero 2003-08-01
  • 打赏
  • 举报
回复
to yangchaobj(太白金星)
你说怎么引用函数地址?
mero 2003-08-01
  • 打赏
  • 举报
回复
这是teach函数的定义:int teach(int a,int b);
mero 2003-08-01
  • 打赏
  • 举报
回复
teach是文档类的一个函数,我要在视图类中调用他,并且是以函数传址的方式调用。
如果teach是视图类的函数,可以进行传址调用,为什么放到视图类中就不行了呢?
lyb12345 2003-08-01
  • 打赏
  • 举报
回复
teach的类型与pMyFunction的类型不一样也就是teach不是int (* MyFunction)(int a,int b)类型
yangchaobj 2003-08-01
  • 打赏
  • 举报
回复
为什么要用函数指针指向一个int型的变量?指向一个函数地址才对。
这似乎是编译不过的关键。
suxk 2003-08-01
  • 打赏
  • 举报
回复
里面的参数都相同吗?
mero 2003-08-01
  • 打赏
  • 举报
回复
高手来帮忙呀!很急的!
mero 2003-08-01
  • 打赏
  • 举报
回复
有人没有呀,帮帮忙呀!!!
mero 2003-08-01
  • 打赏
  • 举报
回复
是int型的,他老是编译不过,怎么回事?
铖邑 2003-08-01
  • 打赏
  • 举报
回复
pDoc->teach是什么类型的?可能是这种类型不能进行函数指针的强制转换。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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