2017-11-09 8 views
0

最初のもの: 私は関連する問題を読んでいます&解決方法はエラーを修正しませんでした。クラス "std :: result"にタイプがありません

は考慮:

double foo(cv::InputArray Input1, 
      cv::InputArray Input2, 
      cv::InputOutputArray InOut, 
      cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS, 50, 0.001)), 
      cv::InputArray Input3 = cv::noArray()) 
{ 
     return 2; 
} 

私は関数を呼び出す場合:

cv::Mat In1, In2, InOut; //dummy for test 
double ret = foo(In1, In2, InOut); 

それがコンパイルします。だから私は:: STDとREFを試してみましたが、それは私に同じエラー与え

no type named "type" in class std::result

double ret = 0; 
std::thread th(ret, &foo, &In1, &In2, InOut); 

double ret = 0; 
std::thread th(ret, &foo, std::ref(In1), std::ref(In2), std::ref(InOut)); 
+0

あなたは 'のstd ::糸の第一パラメータとしてdoubleを渡す::スレッド "、私はそれが動作するとは思わない。 –

+0

[C++:std :: threadからの単純な戻り値の可能な複製](https://stackoverflow.com/questions/7686939/c-simple-return-value-from-stdthread) –

答えて

0

最初のポイント:

を私はそれをスレッドしようとするが、私はこのエラーを得ました

出力を得るには、他のツールを使用する必要があります(リンクされた答えを確認する)か、最も簡単な方法はdoubleとして&をパラメータとして使用することです。

2点目:

あなたは:: CV ::マット上の参照を()STDは必要ありませんが、二重の&のために、あなただけのstdにあなたのデフォルト値を定義する必要がある場合必要があります。 :スレッドコンストラクタ。

これは(テストしたが、自信を持って、結果ではない)にコンパイルする必要があります

std::thread t(&foo, In1, In2, InOut, cv::TermCriteria(values), cv::noArray(), std::ref(retval)); 

で:

void foo(cv::InputArray Input1, 
     cv::InputArray Input2, 
     cv::InputOutputArray InOut, 
     cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS, 50, 0.001)), 
     cv::InputArray Input3 = cv::noArray(), 
     double& retval) 
    { 
     retval = 2; 
    } 
関連する問題