我遇到了这个错误:错误 c2064:术语不评估为采用 0 个参数的函数。问题是该函数接受 0 个参数,我调用 0 个参数,但我不明白出了什么问题。
RWLock* rwl = new RWLock();
std::thread t1(&RWLock::read);
这就是对函数的调用。这是功能:
void read();
有人知道问题是什么吗?提前致谢!
所有非静态成员函数都有一个隐藏参数,它成为this
成员函数中的指针如果要将非静态成员函数用作线程,则必须在启动线程时提供此隐藏参数:
std::thread t1(&RWLock::read, rwl);
我很确定,这read()
不是一个静态函数。也就是说,您将其声明为:
void read()
代替:
static void read()
非静态成员函数总是需要一个额外的参数——隐式this
指针。使read()
静态,它应该工作。
如果read()
不能是静态的,则将一个附加参数传递给std::thread
- 一个指向对象的指针,这read()
将起作用。在这种情况下,它应该是rwl
:
RWLock* rwl = new RWLock();
std::thread t1(&RWLock::read, rwl);