我正在编写一个非常简单的c ++程序。

#include<iostream>
#include<thread>

class Fortest{
private:
    int x;
public:
    Fortest(int a)
    {
        x=a;
    }
    void run(void)
    {
        cout<<"test sucesses!"<<endl;
    }
};

int main()
{
    Fortest  hai(1);
    std::thread  t;

    t=std::thread(std::ref(hai),&Fortest::run());
    t.join();

    cout<<"program ends"<<endl;
    return 0;
}


而且,我不断收到错误消息:“没有对象就无法调用成员函数”。谁能帮我解决这个问题?

最佳答案

您有两个问题:

首先是调用线程函数,将指针传递给它返回的值。您应该将指针传递给该函数。

第二个问题是您以错误的顺序传递了std::thread constructor参数。指向函数的指针是第一个参数,调用它的对象是第二个参数(这是函数的第一个参数)。

即它应该像

t = std::thread(&Fortest::run, &hai);

关于c++ - 错误:在没有对象的情况下无法调用成员函数'void Fortest::run()',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46709425/

10-10 16:19