在类中创建一个线程给我错误C2664

时间:2016-10-24 10:59:26

标签: c++ multithreading qt

让我把你放在上下文中。我正在使用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'

我不知道为什么以及它意味着什么。我搜索了一下,但似乎没有人像这样的任何错误。所以,我依靠你们所有人。

1 个答案:

答案 0 :(得分:0)

“std :: allocator_arg_t”听起来像是你的构造函数,因为它正在分配一些东西:

Window::Window(): QWidget()无效,你已经在类decleration中继承了QWidget,因此隐式调用QWidget的构造函数。 Window::Window()就足够了。

另外:我不知道public slots:应该是什么意思。您可以完全省略,因为您已经拥有上面的public:限定符。