[英]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.