函数指针与类的成员间调用?急救!急救!急救!(0分)

  • 主题发起人 主题发起人 柳有权
  • 开始时间 开始时间

柳有权

Unregistered / Unconfirmed
GUEST, unregistred user!
以下这个例子中,fun函数是一个事先作好的程序,我不想变它,而我现在有一个类,如test,它中间有一个函数sumit,我想将该函数传入fun,请问哪位大虾有办法解决,在下先谢谢了!!!
class test
{
public:
int sum;
void sumit(int x);
};
void test::sumit(int x)
{
int i;
sum=0;
for(i=0;i<x;i++)
sum+=i;
return;
}
void fun(void(*aaa)(int),int x)
{
aaa(x);
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
test a;
fun(a.sumit,3);
printf("sum=%d/n",a.sum);
//错误!!!
getch();
return 0;
}
 
将fun的参数定为类函数变量: function (xxxx:xxxx): xxxx of Object;
pascal的例子:
TSumit = procedure (x: Integer) of object;
procedure fun(a: TSumit;
b: Integer);
begin
a(b);
end;
 
不知道 c++ 中怎么样,反正 delphi 就是上述方法了,
真是方便。
 
c++也差不多.
 
可能各位网友没有真正弄清我的意思,外部的那个函数fun我并不想变,如果
单纯传入该函数,如下:
fun(对象::函数)
这样编译通不过。
改动源程序的工作量太大了,而且这些外部函数的通用性大大受到限制,
不知如果只是改动这些外部函数的头文件中的函数说明可不可以?
谢谢各位大虾!!!
 
原来你的fun是什么样的,需不需要一个类型为过程的参数,
如果没有只有改了,
 
定义一个过程, 和一个全局变量。
TSumit = procedure (x: Integer) of object;
Sumit:TSubmit;
procedure MyProc(b:Integer);
begin
Sumit(b);
end;

调用:
Submit:=ATest.Submit;
fun(MyProc, b);
 
sumit定义为静态函数:
static void sumit(int x);
就可以用 test::sumit 来传递,只是 sumit 里面不能直接访问 this 这个对象了
(因为它实际是一个全局的函数了)
 
#pragma argsused
int main(int argc, char* argv[])
{
test a;
fun(a.sumit,3);
printf("sum=%d/n",a.sum);
<font color=red>//错误!!!</font>
getch();
return 0;
}
你的意识你现在是不是标为"错误!!!"的地方出错???
 
//现在我将示例放在这儿!
//这是我以前写的函数,我现在不想变了
void fun(int(*a1)(int),int n)
{
int re=a1(n);
printf("%d,%d/n",re,n);
}
//一个一般函数
int obj(int a)
{
return a*a;
}
//现在写的一个类
class test
{
public:
int t;
void mytry();
//类的一个函数
};
//
int main(int argc, char* argv[])
{
fun(obj,3);
//调用成功
test t;
fun(t.mytry,3);//编译就通不过
getch();
return 0;
}
谢谢大家能够积极参与!!!还望各路大虾不吝赐教!!!
 
t.mytry是一个类函数,跟一般的函数当然不一样。
是不能把一个类函数转换为一个一般函数的,否则,
如果类函数中用到了类成员,不就乱套了?
 
fun(int(*a1)(int), int n) a1 是不是一个带有一个int 参数的函数,
如果是这样的话,有可能是 t.mytry 没有参数的缘故。试一试。
 
如果你不改fun,90%你不能办到。
 
谢谢各位!!!尤其谢谢PiPi,Hexi!!!你们提供的答案我试了一下,在C++中用
static来说明类的成员函数非常好,谢谢了!非常抱歉,我没分了,否则甘愿送分200。
另外上例中写的有一点问题,类的函数mytry返回类型应为int(此处只是我在这敲的
问题,原程序中为正确的)
 
后退
顶部