std :: thread & lt; неразрешенная перегруженная функция type & gt; ошибка

Я пытаюсь создать поток из моего класса, и поток выполняет определенный метод в моем классе. Код выглядит так:

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)’

Я не уверен, что здесь на самом деле ошибка. Может кто-то помочь мне с этим?

Благодарю.

21

Решение

Проблема в том, что функция-член не может быть вызвана без объекта. Предоставить указатель на this так что текущий объект используется:

thread t(&ThreadClass::myThread, this, 10);

Вы можете использовать экземпляр любого ThreadClass объект, но в вашем случае, похоже this это правильная вещь.

ПРИМЕЧАНИЕ: Помните, что вам нужна ссылка на созданный поток, чтобы вы могли сделать join() позже.

27

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

Других решений пока нет …

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