~对重载函数的调用不明确

求助~!对重载函数的调用不明确!
一个简单的哈夫曼树的实现问题.
使用map关联字符跟其编码.
template<class DataType>
class ...{
map<DataType,string> k2c;
//声明为友元
template<class CodeType,class T>
friend void Key2Code(CodeType &,const HuffNode<T> *,const string&);
//调用下面定义的模版函数
void Map_Key2Code(){Key2Code(k2c,root,"");}  


}
定义了模版函数,实现将字符转换为哈夫曼编码并关联储存下来。
template<class T,class CodeType>
void Key2Code(CodeType &codesaver,const HuffNode<T> *rt,const string& code){
....}


但是,在编译的时候报错!
error C2668: “Key2Code”: 对重载函数的调用不明确
可能是“void Key2Code<DataType,std::map<_Kty,_Ty>>(CodeType &,const HuffNode<DataType> *,const std::string &)”
或    “void Key2Code<std::map<_Kty,_Ty>,DataType>(CodeType &,const HuffNode<DataType> *,const std::string &)”

不明白啊!!高手求解答啊!!怎么改才正确呢??

------解决方案--------------------
友元声明和定义的类型参数的顺序弄相反了。