class std::result 中没有名为 "type" 的类型
no type named "type" in class 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);
它编译;但是当我尝试穿线时,我得到了这个错误:
no type named "type" in class std::result
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));
第一点:
要获得输出,您需要使用其他工具(检查链接的答案),或者最简单的方法是使用 double& 作为参数。
第二点:
您不需要 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;
}
第一件事: 我阅读了相关问题和解决方案并没有修复错误。
正在考虑:
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);
它编译;但是当我尝试穿线时,我得到了这个错误:
no type named "type" in class std::result
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));
第一点:
要获得输出,您需要使用其他工具(检查链接的答案),或者最简单的方法是使用 double& 作为参数。
第二点:
您不需要 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;
}