2016-07-19 9 views
1

私はアンドロイドアプリケーションでスレッドを使用する必要があります。これは、ネイティブopencvで画像処理を行うためです。ここに私のコードは次のとおりです。私はアプリを実行しようとするたびにAndroid NDKスレッド非静的メンバー関数の無効な使用

void Detector::processBinary(Mat &binary) { 
    //do stuff 
} 

void Detector::Detect() { 
    ... 
    thread t1(processBinary, binary); 
    t1.join(); 
} 

しかし、私は(バイナリprocessBinary、)スレッドT1からのエラー「非静的メンバ関数の無効な使用」を取得します。しかし、このラインは、完全にビジュアルスタジオで動作します。誰もこれで私を助けることができますか?前もって感謝します!

+0

ツールチェーンをVisual Studioで使用していますか?メンバ関数は 'std :: thread'のコンストラクタの第1引数ではありません。 –

+0

ここでvs2015でこれを見つけることができますか? –

答えて

1

あなたはthis引数を必要とするメンバ関数を使用します(オブジェクトによって呼び出される必要があります)。 2つの選択肢があります。

使用静的クラスの関数(またはまったく非クラスの機能):

void processBinary(Mat &binary) { 
    //do stuff 
} 

void Detector::Detect() { 
    ... 
    thread t1(processBinary, binary); 
    t1.join(); 
} 

それとも、我々はメンバ関数を利用したい場合は、適切な引数を渡す:

void Detector::processBinary(Mat &binary) { 
    //do stuff 
} 

void Detector::Detect() { 
    ... 
    thread t1(&Detector::processBinary, *this, binary); 
    t1.join(); 
} 
+0

ほとんどの作業。私はstd :: ref(バイナリ)を追加して、ポップアップしたいくつかのエラーを取り除く必要がありました。助けてくれてありがとう! –

関連する問題