Сначала я реализовал следующие функции в том же файле .cpp, что и main(). Все работает отлично. Но я столкнулся с некоторой проблемой, когда попытался определить их в файле заголовка и реализовать их в отдельном файле .cpp.Функция шаблона LNK2005
Это мой исходный код:
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(){...}
Затем я удаляю выполнение функций и определить их в файле заголовка:
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);
и реализовать их в файле .cpp.
Тогда, когда я включаю оба файла заголовочного файла и CPP, и запустить проект:
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> >....
Может кто-нибудь дать подсказку, что я мог бы что сделали?
Большое спасибо!
Посмотрите там ===> в правой части этой страницы в разделе Связанный товар. «Почему шаблоны могут быть реализованы только в файле заголовка?» рассказывает вам все, что вам нужно знать. –