我想重載一個Sum函數,它接受[list或vector]開始和結束迭代器作爲參數。這個編譯器錯誤讓我很困惑。相關代碼如下:函數重載,無法推導模板參數
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:「常量雙總和(常量 T1 ::爲const_iterator &,常量T2 ::爲const_iterator &) ':無法推斷 模板參數關於 'T1'
iterators.cpp(72):錯誤C2783:' const的雙薩姆(常量 T1 ::爲const_iterator &,常量T2 ::爲const_iterator &)」:無法推斷 模板參數關於 'T2'
iterators.cpp(72):錯誤C2780: 'const的雙薩姆(常量 的std ::地圖&)':期望1個參數 - 2提供
iterators.cpp(72):錯誤C2780: 'const的雙薩姆(常量Ť&)': 期望1個參數 - 2提供
如何編譯器不能識別我試圖用兩個輸入調用Sum函數?我錯誤地調用了該函數?
謝謝!
我怎麼能讓他們保持常量? –
@Clark你不能。你可能不想;迭代器和const_iterator之間的區別在很多情況下是不相關的(例如輸入迭代器)。如果將模板記錄爲接受輸入迭代器('template',而不是'Iter'),那麼很明顯該函數不會改變序列。否則,你記錄它沒有。 –
非常感謝。 –