C++ OpenMP与boost::directory_迭代器并行

C++ OpenMP与boost::directory_迭代器并行,c++,boost,openmp,C++,Boost,Openmp,我上面有一条代码+错误消息,我无法解决这个问题。有什么想法吗 #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()).st

我上面有一条代码+错误消息,我无法解决这个问题。有什么想法吗

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

不能在工作共享循环中直接使用
目录迭代器
,因为它不是随机访问迭代器。最简单的方法是将std::copy复制到
st::vector
,然后在该向量上执行并行循环。或者,您可以使用锁和手动工作共享,但这更难做到正确。

您不能在工作共享循环中直接使用
目录迭代器,因为它不是随机访问迭代器。最简单的方法是将std::copy
复制到
st::vector
,然后在该向量上执行并行循环。或者,您可以使用锁和手动工作共享,但这更难做到正确。

那么为什么不简单地编写
itr=p\u c
呢?您是否已经尝试过
boost::filesystem::directory\u iterator itr=p\u c?是的,那么错误是:
错误:从'boost::filesystem::path'转换为非标量类型'boost::filesystem::directory\u iterator'(boost::filesystem::directory\u iterator itr=p\u c;itr!=end\u itr;++itr)
@koviroli实际上是什么?提供一个please.canyouput
boost::filesystem::directory\u迭代器itr(p\u c)代码,然后将循环编写为
for(;itr<…
?为什么不简单地编写
itr=p_c
?您是否已经尝试过
boost::filesystem::directory\u迭代器itr=p_c;…
?是的,那么错误是:
错误:请求将“boost::filesystem::path”转换为非标量类型“boost::filesystem::directory\u迭代器”(boost::filesystem::directory_iterator itr=p_c;itr!=end_itr;++itr)
@koviroli什么是
p_c
实际上?请提供一个例子。你能把
boost::filesystem::directory_iterator itr(p_c);
放在循环前面,然后把循环写成
for(;itr
.../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)


                                    ^