我上面有一个代码+错误消息,我无法解决问题。有什么想法吗?
#pragma omp parallel num_threads(3)
#pragma omp for
for (boost::filesystem::directory_iterator itr(p_c); itr != end_itr; ++itr)
{
std::string outputfile = (out_p/itr->path().filename()).string();
cv::Mat image = cv::imread(itr->path().string());
ImageContainer imgc = ImageContainer(itr->path().string(), outputfile, image);
if(!imgc.Image().data)
{
std::cout << imgc.Input_Path() << " is not found." << std::endl;
continue;
}
std::cout << "Processing " << imgc.Input_Path() << std::endl;
streaks_detection(imgc);
}
关于 directory_iterator 的初始化的错误消息。
.../main.cpp:248: error: parenthesized initialization is not allowed in OpenMP 'for' loop
for (boost::filesystem::directory_iterator itr(p_c); itr != end_itr; ++itr)
^
答案 0 :(得分:2)
您不能在工作共享循环中直接使用directory_iterator
,因为它不是随机访问迭代器。最简单的方法是std::copy
到st::vector
,然后在向量上执行并行循环。或者,您可以使用锁和手动工作共享,但更难以正确使用。