作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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);
}
最佳答案
SDL_CreateThread
需要一个指向带有 int(void *ptr)
签名的常规函数的指针作为第一个参数,但是您提供的是非静态成员函数(甚至不是一个指针,因为成员函数没有隐式转换为指针)。您应该将 getInput
重新声明为静态。 this
指针将作为 ptr
提供。
关于c++ - SDL2线程在类里面不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456750/
我是一名优秀的程序员,十分优秀!