C++ LNK2005模板函数

C++ LNK2005模板函数,c++,templates,C++,Templates,我首先在与main相同的.cpp文件中实现以下函数。一切都很完美。但当我试图在头文件中定义它们并在单独的.cpp文件中实现它们时,遇到了一些问题 这是我的原始代码: template <class T> //implement the sum function of one single container double sum(const T& source){...} //explicit specialization for map template<>

我首先在与main相同的.cpp文件中实现以下函数。一切都很完美。但当我试图在头文件中定义它们并在单独的.cpp文件中实现它们时,遇到了一些问题

这是我的原始代码:

template <class T> //implement the sum function of one single container
double sum(const T& source){...}

//explicit specialization for map
template<>
double sum<map<string, double>>(const map<string,double>& source){...}

template <class T> //implement the sum function for two iterators
double sum( const class T::const_iterator& start,  const class T::const_iterator& end){...}

//explicit specialization for map (sum function of iterator)
template<>
double sum<map<string, double>>(const map<string, double>::const_iterator& start,const map<string, double>::const_iterator& end){...}

void main(){...}
我收到了如下错误消息:

sum.obj : error LNK2005: "double __cdecl sum<class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >....
谁能暗示一下我可能做错了什么


非常感谢

我想这是你的问题:

double sum<map<string, double>> # <-- here
似乎您正在使用>>运算符,您应该留出空间以避免出现这种情况

double sum< map<string, double> > # space

请看那边==>本页右侧的相关标题下。为什么模板只能在头文件中实现?C++ C++ 11中C++,11是用C++ C++语言编写的,C++语言11的标签是针对C++ 11的特定问题而不是C++的。此外,这是一个链接器错误,而不是编译器错误-如果解释为位移位运算符的>>出现问题,则可能是编译器错误。
double sum<map<string, double>> # <-- here
double sum< map<string, double> > # space