У меня эта ошибка: ошибка 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);