0

Visual StudioでOMPTLを使用しようとしていました。私が理解している限りでは、OMPTL がいくつかの stl 関数のマルチスレッド実装を使用できるようにするには、/openmp オプションを設定するだけで済みます。

/openmp を使用しない場合、すべて問題なく、OMPTL はマルチスレッドなしで関数を通常の stl カウンター部分にマップします。ただし、/openmp を使用すると、次のコンパイラ エラーが発生します。

Error 1 error C2572: 'omptl::transform_accumulate' : redefinition of default parameter : parameter 6 ..\include\omptl\omptl_numeric_extentions_par.h 132

問題の行は言う

template <class Iterator, class T, class UnaryFunction, class BinaryFunction>
T transform_accumulate(Iterator first, Iterator last, const T init,
   UnaryFunction unary_op, BinaryFunction binary_op,
   const unsigned P = omp_get_max_threads())
{
 return ::omptl::_TransformAccumulate
 <typename ::std::iterator_traits<Iterator>::iterator_category>
  ::transform_accumulate(first, last, init,
     unary_op, binary_op, P);
}

これを修正する方法はありますか、それとも OMPTL は単に Microsoft のコンパイラでは使用できませんか?

4

1 に答える 1

0

コンパイラは、このテンプレート宣言で既定のパラメーターを受け入れないようです。両方の宣言から削除= omp_get_max_threads()すると、問題が解決しました。

于 2010-09-28T13:38:35.537 に答える