0
SDL2 라이브러리로 멀티 스레딩을 사용하여 입력 처리기를 만들려고합니다. 나는 ... 그것을 컴파일하고 날이 오류를 제공하지 않습니다 클래스에SDL2 스레드가 클래스 내부에서 작동하지 않습니다.
error: cannot convert 'inputHandlerClass::getInput' from type 'int (inputHandlerClass::)(void*)' to type 'SDL_ThreadFunction {aka int (*)(void*)}'
을 스레드를 넣어하려고 할 때 그러나, 나는 그 길을 내가 함수 이름 (FN)을 통과하고 있다는 확신 SDL_CreateThread 함수에 전달합니다.
이
그러나 당신이 제공하는#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);
}
정적 멤버 함수로 다시 선언했지만 이제 다음 오류가 발생합니다. 오류 : 멤버 함수 'static int inputHandlerClass :: getInput (void *)'을 정적 링크로 선언 할 수 없습니다. [-fpermissive] –
선언 대신 함수 정의를 변경했을 수 있습니까? – VTT
해결책을 찾았습니다. 나는 gnu 컴파일러를 사용하고 있었고 컴파일러에게 -fpermissive 플래그를 주면 오류를 무시하고 성공적으로 컴파일되었습니다. –