0

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

1 回答 1

4

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

所以

Fred f;
f.hello()

相当于

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

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

Fred f;
std::thread t(&Fred::hello, &f);
于 2013-05-10T15:37:47.717 回答