![](/img/trans.png)
[英]cannot call member function 'virtual void ThreadBase::doTask()' without object
[英]error: cannot call member function 'void Fortest::run()' without object|
我正在编写一个非常简单的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
构造函数参数。 指向函数的指针是第一个参数,调用它的对象是第二个参数(这是函数的第一个参数)。
即应该是这样的
t = std::thread(&Fortest::run, &hai);
你说错了
尝试:
Fortest hai(1);
std::thread t;
t=std::thread(&Fortest::run, std::ref(hai));
t.join();
或通过t=std::thread(&Fortest::run, &hai);
检查std :: thread上的参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.