Скорее всего, из того, что вы показываете, проблема в том, что dSpaceCollide
просто хочет
typedef void (*dNearCallback)(void*,dGeomID,dGeomID)
обратный вызов, то есть функция с одним void*
указателем пользовательских данных и двумя dGeomID
s в качестве параметров. void*
- это любые данные, которые вы передали dSpaceCollide
тогда.
Предполагается, что dSpaceCollide
определено примерно так:
void dSpaceCollide(CSpace s, void* user_data, dNearCallback cb){
// somewhere inside the code it will call your callback:
cb(user_data, some_other, params);
// ...
}
Затем вы можете изменить обратные вызовы на это:
void NearCallback(dGeomID o1, dGeomID o2);
static void StaticNearCallback(void* data, dGeomID o1, dGeomID o2){
ODEPhysics* self = static_cast<ODEPhysics*>(data);
self->NearCallback(o1, o2);
}
Больше не требуется указатель void* data
в функции-члене, поскольку data
относится только к статическому обратному вызову:
// assuming you call this inside of your ODEPhysics class
dSpaceCollide(Space, this, &ODEPhysics::StaticNearCallback);
// pass this as user_data