关于函数传址的问题!
代码如下:
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)'
问题点数:50、回复次数:14Top
1 楼xpdavis(咕嘟-不想孤独)回复于 2003-08-01 07:37:30 得分 0
pDoc->teach是什么类型的?可能是这种类型不能进行函数指针的强制转换。Top
2 楼mero(mero)回复于 2003-08-01 07:51:55 得分 0
是int型的,他老是编译不过,怎么回事?Top
3 楼mero(mero)回复于 2003-08-01 08:02:22 得分 0
有人没有呀,帮帮忙呀!!!Top
4 楼mero(mero)回复于 2003-08-01 08:10:17 得分 0
高手来帮忙呀!很急的!Top
5 楼suxk(逍遥小子)回复于 2003-08-01 08:21:50 得分 0
里面的参数都相同吗?Top
6 楼yangchaobj()回复于 2003-08-01 08:27:18 得分 0
为什么要用函数指针指向一个int型的变量?指向一个函数地址才对。
这似乎是编译不过的关键。Top
7 楼lyb12345(lyb)回复于 2003-08-01 08:28:51 得分 0
teach的类型与pMyFunction的类型不一样也就是teach不是int (* MyFunction)(int a,int b)类型Top
8 楼mero(mero)回复于 2003-08-01 08:33:06 得分 0
teach是文档类的一个函数,我要在视图类中调用他,并且是以函数传址的方式调用。
如果teach是视图类的函数,可以进行传址调用,为什么放到视图类中就不行了呢?Top
9 楼mero(mero)回复于 2003-08-01 08:34:07 得分 0
这是teach函数的定义:int teach(int a,int b);Top
10 楼mero(mero)回复于 2003-08-01 08:36:12 得分 0
to yangchaobj(太白金星)
你说怎么引用函数地址?Top
11 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-01 08:43:19 得分 50
举个例子,假设有如下类:
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类成员函数。Top
12 楼mero(mero)回复于 2003-08-01 08:47:25 得分 0
呵呵,是呀!
他为什么会是void (__cdecl * __cdecl test)(int)?Top
13 楼mero(mero)回复于 2003-08-01 08:50:23 得分 0
还有别的解决方法吗?Top
14 楼yangchaobj()回复于 2003-08-01 11:28:04 得分 0
引用类中的函数比较麻烦,要涉及到this指针的传递。
不如用static修饰副。
要不就放到全局。Top




