【发布时间】:2011-06-03 09:59:14
【问题描述】:
嗨 我正在尝试传递一个作为成员函数的回调。我知道函数指针和成员函数指针是不同的,并尝试创建一个包装器并使用静态强制转换和 void 指针。不幸的是我遗漏了一些东西,因为我的代码在编译时产生了错误
Error 16 error C2664: 'dSpaceCollide' : cannot convert parameter 3 from 'int (__cdecl *)(void *,void *,dGeomID,dGeomID)' to 'dNearCallback (__cdecl *)'
我的代码.....
class ODEPhysics
头文件
void NearCallback (void* data, dGeomID o1, dGeomID o2);
static int StaticNearCallback(void* data, void* userPtr, dGeomID o1, dGeomID o2);
.cpp file
void ODEPhysics::NearCallback (void* data, dGeomID o1, dGeomID o2){.........}
void ODEPhysics::StaticNearCallback(void* data , void* userPtr, dGeomID o1, dGeomID o2)
{
static_cast<ODEPhysics*>(userPtr)->NearCallback( data, o1, o2);
}
dSpaceCollide (Space, 0, &ODEPhysics::StaticNearCallback);
如果有人能澄清我做错了什么以及为什么会非常感激。
弗雷德
【问题讨论】:
-
dSpaceCollide的签名是什么? -
“我知道函数指针和成员函数指针是不同的,并且已经尝试过 [...] 静态转换”。不知怎的,我想你不明白。演员表不是让你的问题消失的魔杖。
-
是的,没有 dSpaceCollide 的签名我只能猜测。在 dSpaceCollide 的调用中接受的函数指针中可能没有 userPtr 参数?还是没有数据参数?
-
为什么在你定义
static int StaticNearCallback的类中,后来又被用作void ODEPhysics::StaticNearCallback?... -
dSpaceCollide 的签名是
标签: c++ function pointers callback member