Std:: thread <неразрешенный перегруженный тип функции> ошибка
Я пытаюсь создать поток из моего класса, и поток выполняет определенный метод в моем классе. Код выглядит следующим образом:
class ThreadClass{
int myThread(int arg){
// do something
}
void createThread(){
thread t = thread(myThread,10);
}
} ;
Этот код компиляции выдает сообщение об ошибке
std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (ThreadClass::*)(int), _Args = {int}]
no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (ThreadClass::*&&)(int)’
Я не уверен, что здесь является настоящей ошибкой. Может кто-нибудь помочь мне с этим?
Спасибо.
Ответы
Ответ 1
Проблема заключается в том, что функция-член не может быть вызвана без объекта. Укажите указатель на this
, чтобы использовать текущий объект:
thread t(&ThreadClass::myThread, this, 10);
Вы можете использовать экземпляр любого объекта ThreadClass
, но в вашем случае кажется, что this
- это правильная вещь.
ПРИМЕЧАНИЕ. Помните, что вам нужна ссылка на созданный поток, чтобы позднее можно было сделать join()
.