我和一个朋友正在做一个简单的多人游戏来练习我们的编码。不幸的是,我们遇到了一个问题。SFML线程系统(因为我的编译器还不支持它而不使用std::线程)给了我一个错误。
||===编译:===| C:\===|\Name\ work\Clear_Void\src\GameScreen.cpp||In \work\Clear_Void\src\GameScreen.cpp||In构造函数‘GameScreen::GameScreen()’ C:\Users\Name\Documents\Coding\SFML work\Clear_Void\src\GameScreen.cpp|9|error: ISO C++禁止使用不合格或括号大小的非静态成员函数的地址来形成指向成员函数的指针。“&GameScreen::startThread”-fpermissive| C:\SFML-TDM471x32\include\SFML\System\Thread.inl||In实例化'void::priv::ThreadFunctor::run()与T= void (GameScreen::*)()‘ C:\Users\Name\Documents\编码\SFML work\Clear_Void\src\GameScreen.cpp|53|required从这里转到这里 C:\SFML-TDM471x32\include\SFML\System\Thread.inl|39|error:必须使用“.”或‘-’调用'((sf::priv::ThreadFunctor)this)->sf::priv::ThreadFunctor::m_functor (.)中的指针到成员函数,例如‘(. -> ((sf::priv::ThreadFunctor*)this)->sf::priv::ThreadFunctor::m_functor) (.) ||===构建失败:2错误(S),2(S)警告(0分钟,4秒) ===|
这是我的代码: GameScreen.h
class GameScreen : public Screen
{
public:
GameScreen();
void handleInput(sf::RenderWindow&) override;
void update(sf::RenderWindow&, sf::View&) override;
void render(sf::RenderWindow&) override;
void startThread();
private:
sf::Vector2f moveVal;
Network network;
Events eventManager;
Map m_map;
sf::Thread networkThread;
};GameScreen.cpp (相关组)
GameScreen::GameScreen()
: networkThread(&startThread)
{
network.Connect();
}我检查了SFML线程教程,并根据它们,这应该是可行的。请帮帮忙。
发布于 2015-12-06 07:02:19
startThread应该是静态的。通常,线程函数不能调用非静态成员函数.
https://stackoverflow.com/questions/34114658
复制相似问题