SFML线程错误(SFML threading error)

编程入门 行业动态 更新时间:2024-10-25 17:28:49
SFML线程错误(SFML threading error)

我和朋友正在制作一个简单的多人游戏来练习我们的编码。 不幸的是我们遇到了一个问题。 SFML线程系统(不使用std :: thread因为我的编译器还不支持它)给了我一个错误。

|| === Build:Debug in Clear Void(编译器:GNU GCC编译器)=== | C:\ Users \ Name \ Documents \ Coding \ SFML work \ Clear_Void \ src \ GameScreen.cpp ||在构造函数'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 ||实例化'void sf :: priv :: ThreadFunctor :: run()[with T = void(GameScreen :: *)()]' :|

C:\ Users \ Name \ Documents \ Coding \ SFML work \ Clear_Void \ src \ GameScreen.cpp | 53 |从这里需要|

C:\ SFML-TDM471x32 \ include \ SFML \ System \ Thread.inl | 39 |错误:必须使用'。 '或' - > '在'((sf :: priv :: ThreadFunctor )中调用指向成员函数的函数- > sf :: priv :: ThreadFunctor :: m_functor(...)',例如'( ... - > ((sf :: priv :: ThreadFunctor *)this) - > sf :: priv :: ThreadFunctor :: m_functor)(...)'|

|| ===构建失败:2个错误,2个警告(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线程教程,根据它们,这应该工作。 请帮忙。

A friend and I are making a simple multiplayer game to practice our coding. Unfortunately we have encountered a problem. The SFML threading system (Not using std::thread because my compiler doesn't support it yet) is giving me an error.

||=== Build: Debug in Clear Void (compiler: GNU GCC Compiler) ===| C:\Users\Name\Documents\Coding\SFML work\Clear_Void\src\GameScreen.cpp||In constructor 'GameScreen::GameScreen()':|

C:\Users\Name\Documents\Coding\SFML work\Clear_Void\src\GameScreen.cpp|9|error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&GameScreen::startThread' [-fpermissive]|

C:\SFML-TDM471x32\include\SFML\System\Thread.inl||In instantiation of 'void sf::priv::ThreadFunctor::run() [with T = void (GameScreen::*)()]':|

C:\Users\Name\Documents\Coding\SFML work\Clear_Void\src\GameScreen.cpp|53|required from here|

C:\SFML-TDM471x32\include\SFML\System\Thread.inl|39|error: must use '.' or '->' to call pointer-to-member function in '((sf::priv::ThreadFunctor)this)->sf::priv::ThreadFunctor::m_functor (...)', e.g. '(... -> ((sf::priv::ThreadFunctor*)this)->sf::priv::ThreadFunctor::m_functor) (...)'|

||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 4 second(s)) ===|

Here is my code: 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 (Relevant Section)

GameScreen::GameScreen() : networkThread(&startThread) { network.Connect(); }

I checked the SFML threading tutorials and according to them, that should work. Please help.

最满意答案

startThread应该是静态的。 通常,线程函数不能调用非静态成员函数。

startThread should be static. In general, thread functions can't call non-static member functions.

更多推荐

本文发布于:2023-07-20 12:40:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1199641.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线程   错误   SFML   threading   error

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!