2017-02-07 6 views
-1

Это код, я использую:станд :: нить на функции OpenCV генерирует ошибку «Попытка использовать удаленную функцию»

cv::Mat mask, foreground; 
std::thread t(cv::threshold, mask, foreground, 254, 255, cv::THRESH_BINARY); 
t.join(); 

Компиляция с Xcode 8 с поддержкой C++ 11. Есть идеи?

Вот полное сообщение об ошибке:

In file included from /Users/mlitvin/xcode/Create/ImageProcUtils.cpp:13: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:347:5: error: attempt to use a deleted function __invoke(_VSTD::move(_VSTD::get(__t)), _VSTD::move(_VSTD::get(__t))...); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:357:5: note: in instantiation of function template specialization 'std::__1::__thread_execute' requested here __thread_execute(*__p, _Index()); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:369:42: note: in instantiation of function template specialization 'std::__1::__thread_proxy >' requested here int __ec = pthread_create(&__t_, 0, &__thread_proxy, __p.get()); ^ /Users/mlitvin/xcode/Create/ImageProcUtils.cpp:71:21: note: in instantiation of function template specialization 'std::__1::thread::thread' requested here std::thread t(cv::threshold, mask, foreground, 254, 255, cv::THRESH_BINARY); ^ In file included from :368: In file included from :3: In file included from /Users/mlitvin/xcode/Create/Create/Create_Prefix.h:25: In file included from /Users/mlitvin/xcode/Create/3rdParty/OpenCV-2.3.1/modules/imgproc/include/opencv2/imgproc/imgproc.hpp:50: In file included from /Users/mlitvin/xcode/Create/3rdParty/OpenCV-2.3.1/modules/core/include/opencv2/core/core.hpp:56: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:625: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:1087:5: note: '~__nat' has been explicitly marked deleted here ~__nat() = delete; ^ 1 error generated.

Edit 1:

Похоже, проблема с пропусканием объекта типа cv::OutputArray в качестве аргумента.

+2

Какое полное сообщение об ошибке? Он должен сказать вам, какая функция удалена. – NathanOliver

+0

Я замечаю, что вы не передаете адрес-член функции-члена в поток ctor. Я ожидаю увидеть '& cv :: threshold'. Возможно, может случиться так, что сообщение об ошибке с удаленной функцией - это красная селедка, и у вас есть синтаксическая ошибка. – acraig5075

+0

'threshold()' не является функцией-членом, он не находится внутри класса ('cv' - пространство имен opencv). Я пытался добавить '&' перед 'cv :: threshold', но такая же ошибка сохраняется. –

ответ

0

мне удалось решить эту проблему путем добавления функции прокси-сервера, в котором только выход передается по ссылке:

void cv_threshold(cv::Mat _src, cv::Mat& _dst, double thresh, double maxval, int type) { 
    cv::threshold(_src, _dst, thresh, maxval, type); 
} 
... 
cv::Mat mask, foreground; 
std::thread t(cv_threshold, mask, std::ref(foreground), 254, 255, cv::THRESH_BINARY); 
t.join(); 

Я буду рад узнать, почему оригинальный метод не работает, хотя - будет примите ответ, который объясняет это.