我被這個錯誤卡住了。 我也找到了解決方法,但它有種殺死鍛鍊的全部目的。錯誤C2783無法推斷模板參數
我想創建一個函數,將需要兩個迭代器指向相同的容器。我會找到它們之間的元素總和。我創建了順序容器的一般函數,就像vector一樣正常工作。我重載了關聯容器的相同函數。這是一個錯誤。
map<string,double> myMap;
myMap["B"]=1.0;
myMap["C"]=2.0;
myMap["S"]=3.0;
myMap["G"]=4.0;
myMap["P"]=5.0;
map<string,double>::const_iterator iter1=myMap.begin();
map<string,double>::const_iterator iter2=myMap.end();
cout<<"\nSum of map using the iterator specified range is: "<<Sum(iter1,iter2)<<"\n";
//Above line giving error. Intellisense is saying: Sum, Error: no instance of overloaded function "Sum" matches the argument list.
//function to calculate the sum is listed below (It appears in a header file with <map> header included):
template <typename T1,typename T2>
double Sum(const typename std::map<T1,T2>::const_iterator& input_begin,const typename std::map<T1,T2>::const_iterator& input_end)
{
double finalSum=0;
typename std::map<T1,T2>::const_iterator iter=input_begin;
for(iter; iter!=input_end; ++iter)
{
finalSum=finalSum+ (iter)->second;
}
return finalSum;
}
編譯錯誤是: 1> C:\ Documents和Settings \ ABC \我的文檔\ Visual Studio 2010的\項目\ demo.cpp(41):錯誤C2783:「雙總和(常量的std ::地圖::爲const_iterator &,常量的std ::地圖::爲const_iterator &)」:不能推導出模板參數爲 '
解決方法T1':
如果呼叫總和(iter1,iter2)被替換Sum < string,double>(iter1,iter2),它編譯得很好。
我是否試圖按照C++標準做一些不可能的事情?
嘗試使Sum的模板類型成爲迭代器而不是迭代器的內容類型。 模板 \t 雙總和(常量T&input_begin,常量T&input_end) –
Jason
然後,它與一般的總和功能我已經爲載體,其他順序容器書面相撞。 – NotAgain
然後專注你的通用和這裏的具體迭代器類型: – Jason