我正在编写一个非常简单的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;
}
我经常收到错误“无法调用没有对象的成员函数”。有谁能帮我解决这个问题?
答案 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