Qt中的std :: thread :: thread(<unresolved overloaded =“”function =“”type =“”>)</unresolved>

时间:2014-03-27 03:07:02

标签: c++ multithreading qt winsock2

我在本网站上看到的其他答案似乎与我的问题无关。无论如何,在我的mainwindow.cpp文件中,我有一个需要访问ui名称空间的函数:

 do
    {
        intrecv= recv(s1, buffer, 10000,0);
        if(intrecv > 0)
        {
            recvData = buffer;
            ui->textEdit->setText("Connection occurred.\n");
        }   
    }while(intrecv > 0);

以下是我的预处理器命令:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <thread>
#include <string>
#include <QString>

在我的mainwindow.h文件中,我将接收函数原型化为:

    class MainWindow : public QMainWindow
{
    Q_OBJECT
    void receiveFunction();

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_lineEdit_returnPressed();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

然后,在mainwindow.cpp中,我在另一个函数的线程中调用了receive函数:

    void MainWindow::on_pushButton_clicked()
{
    connectFunction();
    std::thread t1(receiveFunction);
    t1.detach();
}

您可以尝试复制我的问题的示例是制作按钮和textEdit字段。让按钮的插槽调用一个编辑textEdit字段的函数。

编辑:我忘了提及:对于我的迷你示例,不要让它编辑textEdit字段,让它接收数据并编辑textEdit字段。

1 个答案:

答案 0 :(得分:0)

错误消息似乎暗示reveiveFunction函数有多个重载,但这可能会产生误导(如果上面的代码是正确的)。该行中存在两个固有错误:

std::thread t1(receiveFunction);

首先,如果不提供类型限定,则不能获取成员函数的地址(并且成员函数不会衰减为指向成员函数的指针)。第二个问题是非静态成员函数需要一个将在其上调用它的对象,而这个对象是您未提供的。该声明可以通过以下方式解决:

std::thread t1(&MainWindow::receiveFunction, this);

这将正确获取成员函数的地址,并提供将在其上评估函数的this指针。