![](/img/trans.png)
[英]std::thread <unresolved overloaded function type> error
[英]std::thread::thread(<unresolved overloaded function type>) in Qt
我在该网站上阅读的其他答案似乎与我的问题无关。 无论如何,在我的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中,我在另一个函数的线程中调用了该接收函数:
void MainWindow::on_pushButton_clicked()
{
connectFunction();
std::thread t1(receiveFunction);
t1.detach();
}
您可以尝试复制我的问题的一个示例是创建一个按钮和一个textEdit字段。 让按钮的插槽调用一个用于编辑textEdit字段的函数。
编辑:我忘了提一下:在我的迷你示例中,不仅仅是让它编辑textEdit字段,让它接收数据并编辑textEdit字段。
错误消息似乎暗示reveiveFunction
函数有多个重载,但这可能会引起误解(如果上面的代码正确)。 该行有两个固有的错误:
std::thread t1(receiveFunction);
首先,如果不提供类型限定条件,就不能获取成员函数的地址(并且成员函数不会衰减到指向成员函数的指针)。 第二个问题是,非静态成员函数需要一个您将不提供的对象,该对象将在该对象上被调用。 该语句可以通过执行以下操作来修复:
std::thread t1(&MainWindow::receiveFunction, this);
这将正确地获取成员函数的地址,并提供将在其上评估函数的this
指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.