让我把你放在上下文中。我正在使用Qt Creator制作聊天框。我对C ++很陌生,所以这是一种挑战。我想使用std::thread
创建一个线程。这是我写的代码:
window.h中
class Window: public QWidget
{
Q_OBJECT
public:
Window();
public slots:
void Config();
private:
void ListenToClients(Server server);
//member...
};
window.cpp
Window::Window(): QWidget()
{
//not important code...
do
{
//nothing
}while(config.getLaunch() == false);
Server myServer(config.getPort(), config.getBroadcast());
std::thread serverThread(&Window::ListenToClients, this, myServer);
}
void Window::Config()
{
config.exec();
}
void Window::ListenToClients(Server server)
{
for(int i = 0; i < 100; i++)
{
server.ListenNewConnections();
}
}
所以我收到了这个错误:erreur:C2664:'std::tuple<void (__cdecl Window::* )(Server),Window *,Server>::tuple(std::tuple<void (__cdecl Window::* )(Server),Window *,Server> &&)'ÿ: imossible to convert argument 1 of 'void (__cdecl Window::* )(Server)' in 'std::allocator_arg_t'
我不知道为什么以及它意味着什么。我搜索了一下,但似乎没有人像这样的任何错误。所以,我依靠你们所有人。
答案 0 :(得分:0)
“std :: allocator_arg_t”听起来像是你的构造函数,因为它正在分配一些东西:
Window::Window(): QWidget()
无效,你已经在类decleration中继承了QWidget,因此隐式调用QWidget的构造函数。 Window::Window()
就足够了。
另外:我不知道public slots:
应该是什么意思。您可以完全省略,因为您已经拥有上面的public:
限定符。