* /}
void GameScreen :: render(sf :: RenderWindow& window){ /*码*/}
Network.cpp(接收 功能 </跨度> 只要)
空虚 网络 </跨度> :: Recieve(Events&amp; eManager){ sf :: Packet m_rPacket; m_socket.receive(m_rPacket,m_serverIP,port); m_rPacket&gt;&gt; /*数据*/ eManager.addEvent(TMP);}
包含纯粹的基类 虚拟 </跨度> 功能。你应该能够弄清楚哪些是 虚拟 </跨度> 基于覆盖关键字。
GameScreen.h
您可以使用 this 在构造函数的初始化列表中:
this
MyClass::MyClass() : AClass(&MyFunction(*this)) { /*do stuff*/ }
但是,这在您的示例中没有意义,因为您正在尝试将指针传递给 MyFunction (或其不存在的返回值) AClass() ,你不能用参数质量指针。您只能传递参数 MyFunction() 实际上 的 调用 强> MyFunction() 。你确定你实际上并不是指这样的东西:
MyFunction
AClass()
MyFunction()
MyClass::MyClass() : AClass() { /*do stuff*/ MyFunction(*this); }
没有看到什么 AClass() 实际上是,或者它期望作为输入,很难确切知道你想要做什么。
的 更新 强> 显然你还没看过 SFML文档 要么 SFML教程 在线程。该 Thread 构造函数将指向函数/方法的指针作为一个输入参数,将函数/方法的可选输入值作为单独的参数。试试这个:
Thread
class MyClass : public sf::Thread { private: static void MyFunction(MyClass &cls); public: MyClass(); };
MyClass::MyClass() : sf::Thread(&MyClass::MyFunction, *this) { /*do stuff*/ } void MyClass::MyFunction(MyClass &cls) { /*do stuff with 'cls'*/ }
或者,就像你一样 能够 使用带有SFML线程的非静态类方法:
class MyClass : public sf::Thread { private: void MyFunction(); public: MyClass(); }; MyClass::MyClass() : sf::Thread(&MyClass::MyFunction, *this) { /*do stuff*/ } void MyClass::MyFunction() { /*do stuff with 'this'*/ }
的 更新 强> :根据你的新代码,你仍然没有接近构建 sf::Thread 对象是否正确(你读过我链接到的文档/教程吗?)。此外,您的线程需要访问所拥有的多个对象 GameScreen ,所以你无法将它们全部传递给 sf::Thread 构造函数。你需要做更像这样的事情:
sf::Thread
GameScreen
class GameScreen : public Screen { public: GameScreen(); ... private: ... Network network; Events eventManager; sf::Thread networkThread; void networkThreadFunc(); };
GameScreen::GameScreen() : networkThread(&GameScreen::networkThreadFunc, *this) { network.Connect(); } void GameScreen::networkThreadFunc() { network.Receive(eventManager); }