0

Visual Studio 2012を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);
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 に答える