嗨 我想传递一个成员函数的回调函数。我知道一个函数指针和一个成员函数指针是不同的,并试图创建一个包装并使用静态转换和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'的签名是什么? – Xeo 2011-06-03 10:03:28
“我明白函数指针和成员函数指针是不同的,并且尝试过静态转换”。不知怎的,我觉得你不明白。演员阵容不是魔术棒,会让你的问题消失。 – MSalters 2011-06-03 10:05:43
是的,没有dSpaceCollide的签名,我只能猜测。也许在dSpaceCollide的调用中接受的函数指针中没有userPtr参数?或没有数据参数? – daramarak 2011-06-03 10:12:35