1

我遇到了这个错误:错误 c2064:术语不评估为采用 0 个参数的函数。问题是该函数接受 0 个参数,我调用 0 个参数,但我不明白出了什么问题。

    RWLock* rwl = new RWLock();
    std::thread t1(&RWLock::read);

这就是对函数的调用。这是功能:

    void read();

有人知道问题是什么吗?提前致谢!

4

2 回答 2

8

所有非静态成员函数都有一个隐藏参数,它成为this成员函数中的指针如果要将非静态成员函数用作线程,则必须在启动线程时提供此隐藏参数:

std::thread t1(&RWLock::read, rwl);
于 2015-04-09T10:01:47.843 回答
2

我很确定,这read()不是一个静态函数。也就是说,您将其声明为:

void read()

代替:

static void read()

非静态成员函数总是需要一个额外的参数——隐式this指针。使read()静态,它应该工作。

如果read()不能是静态的,则将一个附加参数传递给std::thread- 一个指向对象的指针,这read()将起作用。在这种情况下,它应该是rwl

RWLock* rwl = new RWLock();
std::thread t1(&RWLock::read, rwl);
于 2015-04-09T10:02:51.713 回答