0

我正在使用带有 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);
4

2 回答 2

3

由于您使用的是 C++,因此您需要使用 C 链接声明您的函数,因为这是 SDL 所期望的,它本身就是一个 C 库:

extern "C" int gameEvents(void *ptr);
于 2012-11-02T16:00:17.080 回答
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 );
于 2012-11-02T20:23:22.357 回答