web-dev-qa-db-ja.com

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

ここで実際のバグが何であるかわかりません。誰かがこれを手伝ってくれる?

ありがとう。

21
CPS

問題は、オブジェクトなしではメンバー関数を呼び出せないことです。現在のオブジェクトが使用されるように、thisへのポインタを指定します。

_thread t(&ThreadClass::myThread, this, 10);
_

任意のThreadClassオブジェクトのインスタンスを使用できますが、あなたの場合、thisが正しいことのようです。

注:後でjoin()を実行できるように、作成されたスレッドへの参照が必要であることを忘れないでください。

27
imreal