无效使用非静态成员函数(在qt中)

时间:2014-03-30 20:58:24

标签: c++ qt

我在mainwindow.h类文件(标题?)中对我的函数进行了原型设计:

    class MainWindow : public QMainWindow
{
    Q_OBJECT

    public:
    void receiveP();

然后在我的main.cpp类文件中,我告诉函数该做什么:

void MainWindow::receiveP()
{
     dostuff
}

然后在main.cpp类文件的main函数中,我尝试在一个线程中使用它:

 std::thread t1(MainWindow::receiveP);
 t1.detach();

这给了我错误"无效使用非静态成员函数' void MainWindow :: receiveP()'。

1 个答案:

答案 0 :(得分:6)

您正在尝试将成员函数指针传递给thread类的构造函数,该构造函数需要一个普通(非成员)函数指针。

传入一个静态方法函数指针(或指向一个自由函数的指针),并明确地给它一个对象的实例:

// Header:
static void receivePWrapper(MainWindow* window);

// Implementation:
void MainWindow::receivePWrapper(MainWindow* window)
{
    window->receiveP();
}

// Usage:
MainWindow* window = this;   // Or whatever the target window object is
std::thread t1(&MainWindow::receivePWrapper, window);
t1.detach();

确保线程在窗口对象被破坏之前终止