このエラーで立ち往生しています。私も回避策を見つけましたが、それは運動の目的全体を殺してしまいます.
同じ container を指す 2 つの反復子を取る関数を作成しようとしています。それらの間の要素の合計を見つけます。正常に動作する 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): エラー C2783: 'double Sum(const std::map::const_iterator &,const std ::map::const_iterator &)': 'T1' のテンプレート引数を推測できませんでした
回避策:
call Sum(iter1,iter2) を Sum < string,double > (iter1,iter2) に置き換えると、正常にコンパイルされます。
そもそも、C++ 標準では不可能なことをしようとしていたのでしょうか。