0
我想創建一個輸入處理程序使用多線程與SDL2庫;然而,當我試圖把一個線程在一個類不能編譯,給我這個錯誤...SDL2線程不工作在類
error: cannot convert 'inputHandlerClass::getInput' from type 'int (inputHandlerClass::)(void*)' to type 'SDL_ThreadFunction {aka int (*)(void*)}'
我敢肯定,它的方式我傳遞函數名(FN)到SDL_CreateThread函數。
這是source.cpp文件
#include <iostream>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <SDL_thread.h>
#include <SDL_mixer.h>
#include "..\include\gameClass.hpp"
#include "..\include\inputHandlerClass.hpp"
int main(int argc, char *argv[]){
inputHandlerClass inputHandler;
inputHandler.startThread();
std::cout << "hello world";
return 0;
}
這是inputHandlerClass.hpp
#include <SDL_thread.h>
#include <iostream>
class inputHandlerClass{
private:
SDL_Thread *thread;
int threadReturnValue;
public:
inputHandlerClass();
int getInput(void *ptr);
void startThread();
};
//Default Constructor
inputHandlerClass::inputHandlerClass(){
this->thread = SDL_CreateThread(getInput, "inputThread", this);
}
int inputHandlerClass::getInput(void *ptr){
int cnt;
for(cnt= 0; cnt < 10; ++cnt){
std::cout << "counter: " << cnt << std::endl;
SDL_Delay(50);
}
return cnt;
}
void inputHandlerClass::startThread(){
SDL_WaitThread(this->thread, &this->threadReturnValue);
}
我試圖重新聲明爲靜態成員函數,但現在我得到以下錯誤。錯誤:不能聲明成員函數'靜態int inputHandlerClass :: getInput(void *)'有靜態鏈接[-fpermissive] –
也許你已經改變了函數定義而不是聲明? – VTT
我找到了一個修復程序。我正在使用gnu編譯器,並且當我向編譯器提供-fpermissive標誌時,它忽略了錯誤併成功編譯。 –