在下面的代码中,在thread t(&Fred::hello)
我收到一个错误,该术语没有评估为采用0参数的函数。有什么问题?
#include <iostream>
#include <thread>
using namespace std;
class Fred
{
public:
virtual void hello();
};
void Fred::hello()
{
cout << "hello" << endl;
}
int main()
{
thread t (&Fred::hello);
t.join();
return 0;
}
答案 0 :(得分:4)
需要在T
的实例上调用类T
的非静态成员函数,并采用类型为T*
的隐式第一个参数(或const,和/或挥发性T *)。
所以
Fred f;
f.hello()
相当于
Fred f;
Fred::hello(&f);
因此,当您将非静态成员函数传递给线程构造函数时,您也必须传递隐式的第一个参数:
Fred f;
std::thread t(&Fred::hello, &f);