最近のエンジニアリングマルチスレッドクラスのメンバ関数呼び出しを使用する必要があり、問題が間違っていたものを記録、およびソリューションを提供しています。
1.次のようにまず、言葉遣いは、時間を呼び出す一般的なマルチスレッド文です:
STD ::スレッドT0(getRegResultByOneSetpThread、 0、probAll、m_roiBegin、m_roiEnd、のtopN、g_oriPicMat、regAll)。
結果は次のエラーが報告されます。
エラー:非静的メンバ関数の無効な使用
2.次に、マルチスレッド静的フォームのクラスメンバ関数呼び出し内で宣言されるために必要な情報を探して、またはジョブは、このポインタを渡します
Agent_Classifierクラス名。
次のように変更されました:
STD ::スレッドT0(&Agent_Classifier :: getRegResultByOneSetpThread、この、 0、probAll、m_roiBegin、m_roiEnd、のtopN、g_oriPicMat、regAll)。
結果は次のエラーが報告されます。
エラー:クラスSTD」に「タイプ」という名前の無いタイプ:: result_of
3.その理由は、スレッド関数のことである getRegResultByOneSetpThreadパラメータの型が参照型である、ことができます参照型を渡す必要があります。
STD ::スレッドT0(&Agent_Classifier :: getRegResultByOneSetpThread、この、 0、のstd :: REF(probAll)、m_roiBegin、m_roiEnd、のtopN、 STD :: REF(g_oriPicMat)、 STD :: REF(regAll))。
これまでのところコンパイル。
参考:
https://stackoverflow.com/questions/41476077/thread-error-invalid-use-of-non-static-member-function