2012-12-15 40 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)’ 

というエラーがスローされます。誰かがこれで私を助けることができますか?

ありがとうございました。

答えて

25

問題は、メンバー関数をオブジェクトなしで呼び出すことができないことです。 thisへのポインタを提供するので、現在のオブジェクトが使用されていること:

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

あなたはどのThreadClassオブジェクトのインスタンスを使用することができますが、あなたの場合には、thisを行うには正しいことであると思われます。

注:後でjoin()を実行できるように、作成したスレッドへの参照が必要です。

+0

後でjoin()を行う必要がある場合は、作成したスレッドへの参照が必要です。 –

+0

ありがとうございました。それはうまくいった! – CPS

関連する問題