类std :: result中没有名为“type”的类型

时间:2017-11-09 06:53:52

标签: c++ opencv3.0 stdthread

第一件事: 我读了相关的问题&解决方案没有解决错误。

考虑:

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 :: result

中没有名为“type”的类型
double ret = 0;
std::thread th(ret, &foo, &In1, &In2, InOut);

所以我尝试使用std :: ref,但它给了我同样的错误:

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

1 个答案:

答案 0 :(得分:0)

第一点:

要获得您的输出,您需要使用其他工具(查看链接的答案),或者最简单的方法是使用双倍&作为参数。

第二点:

你不需要在cv :: Mat上使用std :: ref(),但是对于double&,你需要在std :: thread构造函数中定义你的默认值。

这应该编译(未经测试,但对结果有信心):

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;
  }