我遇到了此错误:错误 c2064:term 的计算结果不是采用 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);