2012-12-15 11 views
19

Próbuję odrodzić wątek z poziomu mojej klasy, a wątek wykonuje określoną metodę w mojej klasie. Kod wygląda następująco:std :: wątek <nierozwiązany typ funkcji przeciążonej> błąd

class ThreadClass{ 
    int myThread(int arg){ 
    // do something 
    } 

    void createThread(){ 
     thread t = thread(myThread,10); 
    } 

} ; 

Ten kod na kompilacji wyrzuca błąd mówiąc

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

Nie jestem pewien, jaki jest rzeczywisty błąd tutaj. Czy ktoś może mi w tym pomóc?

Dzięki.

Odpowiedz

25

Problem polega na tym, że funkcja członkowska nie może zostać wywołana bez obiektu. Zapewnić wskaźnik do this tak, że obecny obiekt jest używany:

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

Można użyć wystąpienie jakiegokolwiek ThreadClass obiektu, ale w twoim przypadku wydaje this jest słuszne.

UWAGA: Pamiętaj, że potrzebujesz odniesienia do utworzonego wątku, aby móc później wykonać join().

+0

Potrzebujesz odniesienia do utworzonego wątku, jeśli chcesz później wykonać join(). –

+0

Dzięki Nick. To się udało! – CPS

Powiązane problemy