[リストまたはベクトル]の開始および終了イテレータを引数として受け入れるSum関数をオーバーロードしようとしています。このコンパイラエラーは本当に私を混乱させます。関連するコードは次のとおりです。
template <typename T1, typename T2>
const double Sum(const typename T1::const_iterator& start_iter, const typename T2::const_iterator& end_iter)
{// overloaded function that calculates sum between two iterators
typename T1::const_iterator iterator_begin = start_iter;
typename T2::const_iterator iterator_end = end_iter;
double my_sum = 0;
for (iterator_begin; iterator_begin != iterator_end; iterator_begin++)
my_sum += *iterator_begin;
return my_sum;
}
int main()
{
list<double> test_list(10,5.1);
cout << Sum(test_list.begin(), test_list.end()); // compiler errors here
}
次のコンパイラエラーが発生します。
iterators.cpp(72):エラーC2783:'const double Sum(const T1 :: const_iterator&、const T2 :: const_iterator&)':'T1'のテンプレート引数を推測できませんでした
iterators.cpp(72):エラーC2783:'const double Sum(const T1 :: const_iterator&、const T2 :: const_iterator&)':'T2'のテンプレート引数を推測できませんでした
iterators.cpp(72):エラーC2780:'const double Sum(const std :: map&)':1つの引数が必要-2が提供されます
iterators.cpp(72):エラーC2780:'const double Sum(const T&)':1つの引数が必要-2が提供されます
コンパイラは、2つの入力でSum関数を呼び出そうとしていることをどのように認識しませんか?関数を間違って呼び出していますか?
ありがとう!