2012-12-15 51 views
19

我想從我的類中產生一個線程,並且線程在我的類中執行特定的方法。代碼如下所示: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)’ 

我不知道什麼是真正的Bug在這裏。有人可以幫我弄這個嗎?

謝謝。

回答

25

問題是沒有對象就不能調用成員函數。提供一個指向this使當前對象用於:

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

你可以使用任何ThreadClass對象的實例,但在你的情況,似乎this是做正確的事。

注:記住,你需要一個參照創建的線程,這樣你以後可以做一個join()

+0

如果您稍後需要執行join(),則需要對創建的線程進行引用。 –

+0

謝謝尼克。這工作! – CPS

相關問題