我正在使用带有SDL的Visual Studio 2012,我正在做一个简单的线程任务,但我总是遇到这些错误:
argument of type "int (mainGame::*)(void *ptr)" is incompatible with parameter of type "int (__cdecl *)(void *)"
我得到的另一个错误:
error C3867: 'mainGame::gameEvents': function call missing argument list; use '&mainGame::gameEvents' to create a pointer to member
这就是函数的编写方式:
int gameEvents(void *ptr){
//do things here.
return 0;
}
这是我用来调用函数的代码:
SDL_Thread* gh;
gh = SDL_CreateThread(gameEvents,NULL);
答案 0 :(得分:3)
由于你正在使用C ++,你需要使用C链接声明你的函数,因为这是SDL期望的,它本身就是一个C库:
extern "C" int gameEvents(void *ptr);
答案 1 :(得分:1)
将gameEvents()
更改为static
。否则,您的成员函数将具有this
指针的“隐藏”第一个参数,而SDL之类的C API并不知道。
如果您需要访问实例数据,请执行以下操作:
static int mainGame::gameEvents(void *ptr)
{
mainGame* game = (mainGame*)ptr;
//do things here.
return 0;
}
...
mainGame game;
SDL_Thread* gh;
gh = SDL_CreateThread( mainGame::gameEvents, &game );