У меня имеется класс:
template <class T>
class List {
int N; //Number of elements
Elem<T> *Head; //Head of list
public:
//Constructors
List(void);
List(T&);
//Methods
void AddElem (T&, int); //Additional Elem to List by logical number
void DelElem (int); //Delete Elem by logical number
int Max (int); //Search maximum of elements
int Min (int); //Search minimum of elements
void Sort (void); //Sorting insets
Elem<T> *Get (int); //Get point to Elem by set number
//Operations for work with streams
friend std::istream &operator>><>(std::istream &,List<T> &);
int Save (char *); //Save list into the set file
};
Компиляция проходит успешно, а вот при линковке выдается сообщение:
error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl >>(class std::basic_istream<char,struct std::char_traits<char> > &,class List<class NumString> &)" (?>>@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV12@AAV?$List@VNumStr
ing@@@@@Z) referenced in function _main
Причем когда комменчу определение функции Save и ее реализацию, то все линкуется на ура.
Вот реализация функции Save:
int List<NumString>::Save(char *s)
{/*
FPTR pos;
BinFile BF;
if (!BF.Create(s)) return 0;
if (!BF.Open(s)) return 0;
pos=BF.tellg();
Elem<NumString> *ptr=Head;
for (int i=0;i<N;i++)
{
ptr->Obj->Save(s,pos);
pos=BF.tellg();
ptr=ptr->Next;
} */
return 1;
}
А также реализация оператора >>, о коем упоминается в ошибке линковщика:
template <class T>
std::istream &operator>>(std::istream& IO, List<T> &Spisok)
{//IO - input stream, Spisok - List of objects
T Obj;
IO >> Obj;
Spisok.AddElem(Obj,0);
return IO;
}
Скажите, пожалуйста, что я сделал не так и возможно ли вообще такое опредение функции Save (я явно указал значение параметра шаблона). Заранее спасибо!