错误:无法调用成员函数'void Fortest :: run()'没有对象|

时间:2017-10-12 12:18:01

标签: c++

我正在编写一个非常简单的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;
}

我经常收到错误“无法调用没有对象的成员函数”。有谁能帮我解决这个问题?

2 个答案:

答案 0 :(得分:2)

您有两个问题:

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

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

即。它应该像

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

答案 1 :(得分:0)

你的方式是错误的

尝试:

Fortest  hai(1);
std::thread  t;

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

或由t=std::thread(&Fortest::run, &hai);执行此操作 检查std::thread

上的参数

Live demo