我被这个错误困住了。我也找到了一种解决方法,但这有点扼杀了锻炼的全部目的。
我正在尝试创建一个函数,它需要两个指向同一个容器的迭代器。我会找到它们之间的元素之和。我为像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 and settings\ABC\my documents\visual studio 2010\projects\demo.cpp(41): error C2783: 'double Sum(const std::map::const_iterator &,const std ::map::const_iterator &)' : 无法推导出 'T1' 的模板参数
解决方法:
如果调用 Sum(iter1,iter2) 替换为 Sum < string,double > (iter1,iter2),则编译正常。
我是否首先尝试按照 C++ 标准做一些不可能的事情?