Я получаю эту ошибку: ошибка c2064: термин не оценивает функцию, принимающую 0 аргументов, но я не понимаю, почему

У меня эта ошибка: ошибка c2064: термин не оценивает функцию, принимающую 0 аргументов.
Дело в том, что функция принимает 0 аргументов, а я вызываю 0 аргументов, и я не понимаю, в чем дело.

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

Это вызов функции.
И это функция:

    void read();

Кто-нибудь знает в чем проблема?
Заранее спасибо!

1

Решение

Все нестатические функции-члены имеют скрытый аргумент, который становится this указатель в функции-члене Если вы хотите использовать нестатическую функцию-член в качестве потока, вы должны предоставить этот скрытый аргумент при запуске потока:

std::thread t1(&RWLock::read, rwl);
8

Другие решения

Я уверен, что read() не является статической функцией То есть вы объявили это как:

void read()

вместо:

static void read()

Нестатическая функция-член всегда принимает один дополнительный аргумент — неявный this указатель. Делать read() статично и должно работать.

Если read() не может быть статическим, передать дополнительный аргумент std::thread — указатель на объект, который read() будет работать дальше. В этом случае это должно быть rwl:

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

По вопросам рекламы [email protected]