J'essaie de créer un gestionnaire d'entrée en utilisant le multi-threading avec la librairie SDL2; Cependant, lorsque je tente de mettre un fil dans une classe, il ne compilera pas et me donne cette erreur ...SDL2 Le thread ne fonctionne pas à l'intérieur de la classe
error: cannot convert 'inputHandlerClass::getInput' from type 'int (inputHandlerClass::)(void*)' to type 'SDL_ThreadFunction {aka int (*)(void*)}'
Je suis assez sûr que son la façon dont je passe le nom de la fonction (fn) à la fonction SDL_CreateThread.
C'est le fichier 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;
}
C'est le 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);
}
J'ai essayé de re-déclarer en tant que fonction membre statique, mais maintenant j'obtiens l'erreur suivante. erreur: impossible de déclarer la fonction membre 'static int inputHandlerClass :: getInput (void *)' pour avoir une liaison statique [-fpermissive] –
Peut-être avez-vous modifié la définition de la fonction au lieu de la déclaration? – VTT
J'ai trouvé une solution. J'utilisais le compilateur gnu et quand j'ai donné au compilateur le drapeau -fpermissive, il a ignoré l'erreur et a compilé avec succès. –