2013-08-06 3 views
0

Я распараллеливал цикл for (который повторяется через список stl), используя parallel_for_each, но я получил ошибку времени компиляции, заявив, что никакого вызова функции не существует.Intel tbb :: parallel_for_each ошибка времени компиляции

//TBB headers 
#include "tbb/parallel_for_each.h" 

class FUNCTOR 
{ 
public: 
    FUNCTOR( 
     CLASS_A& tree, 
     CLASS_B *groups, 
     const CLASS_C** default_dominator, 
     const CLASS_D& filter 
    ): 
     tree(tree), 
     groups(groups), 
     default_dominator(default_dominator), 
     filter(filter) 
    {} 
      // Iterator dereferences to a pointer 
    void operator()(const ELEMENT_OF_LIST_A*& keeper) const 
    { 
     /*something*/ 
    } 

private: 
    CLASS_A& tree; 
    CLASS_B *groups; 
    const CLASS_C** default_dominator; 
    const CLASS_D& filter; 
}; 


void some_function 
(
    CLASS_A& tree, 
    CLASS_B *groups, 
    const CLASS_C** default_dominator, 
    const LIST_A& keepers, 
    const CLASS_D& filter 
) 
{ 
    // Some code that claims processors 

    //LIST_A_ITER begin = keepers.begin(); 
    //LIST_A_ITER end = keepers.end(); 
    //const ELEMENT_OF_LIST_A* keeper = *begin 

    tbb::parallel_for_each 
    (
     keepers.begin(), keepers.end(), 
     FUNCTOR( 
      tree, 
      groups, 
      default_dominator, 
      filter 
     ) 
    ); 

} 

Ошибка я получил:

error: no matching function for call to 'tbb::internal::parallel_do_operator_selector<tbb::internal::parallel_for_each_body<FUNCTOR, LIST_A_ITER>, ELEMENT_OF_LIST_A*>::call(const tbb::internal::parallel_for_each_body<FUNCTOR, LIST_A_ITER>&, ELEMENT_OF_LIST_A*, tbb::internal::do_iteration_task_iter<LIST_A_ITER, tbb::internal::parallel_for_each_body<FUNCTOR, LIST_A_ITER>, ELEMENT_OF_LIST_A*>::feeder_type&)' 


note: candidate is: static void tbb::internal::parallel_do_operator_selector<Body, Item>::call(const Body&, A1&, A2&) [with A1 = ELEMENT_OF_LIST_A*, A2 = tbb::internal::parallel_do_feeder_impl<tbb::internal::parallel_for_each_body<FUNCTOR, LIST_A_ITER>, ELEMENT_OF_LIST_A*>, Body = tbb::internal::parallel_for_each_body<FUNCTOR, LIST_A_ITER>, Item = ELEMENT_OF_LIST_A*] 

Что пошло не так?

Спасибо!

ответ

0

Оператор() для FUNCTOR имеет посторонний дополнительный уровень косвенности. Объявите его без *, например:

const ELEMENT_OF_LIST_A& keeper 
+0

oh ... итератор разделяет указатель на этот элемент, я должен был бы назвать его указателем –

Смежные вопросы