2012-11-02 41 views
0

我使用Visual Studio 2012與SDL和我做一個簡單的線程任務,但我總是得到這些錯誤:不能使用SDL線程

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); 

回答

3

由於您使用C++,你需要聲明與C鏈接的功能,因爲這就是SDL預計,作爲一個C庫本身:

extern "C" int gameEvents(void *ptr); 
+0

感謝。有用。我確實得到了一些額外的錯誤IntelliSense:鏈接規範是不允許的,但我只是需要從該類中取出函數。該功能必須處於文件級別。 – ARTHUR

1

變化gameEvents()static。否則,您的成員函數將對SDL不知道的C API等指針this「隱藏」第一個參數。

如果您需要訪問實例數據做這樣的事情:

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);