使用类函数创建线程时出错

时间:2013-05-10 15:25:29

标签: c++ multithreading

在下面的代码中,在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;
}

1 个答案:

答案 0 :(得分:4)

需要在T的实例上调用类T的非静态成员函数,并采用类型为T*的隐式第一个参数(或const,和/或挥发性T *)。

所以

Fred f;
f.hello()

相当于

Fred f;
Fred::hello(&f);

因此,当您将非静态成员函数传递给线程构造函数时,您也必须传递隐式的第一个参数:

Fred f;
std::thread t(&Fred::hello, &f);