Не могу скомпилировать простой пример в VS 2008 (Console CLR Application.) постоянно выдает ошибки типа:
Error 1 error LNK2020: unresolved token (06000018) Description<int>::.ctor ConsoleCLR.obj ConsoleCLR
Error 2 error LNK2020: unresolved token (06000019) Description<int>::~Description<int> ConsoleCLR.obj ConsoleCLR
Код примера таков:
//--------------------------------
//Template.h
//--------------------------------
template <class TypeOfValue>
public ref class Description{
public:
Description();
Description(TypeOfValue type);
~Description();
void Show();
String ^ Message;
TypeOfValue Value;
};
//--------------------------------
//Template.cpp
//--------------------------------
#include "Template.h"
template <class TypeOfValue>
Description<TypeOfValue>::Description(){
}
template <class TypeOfValue>
Description<TypeOfValue>::~Description(){
}
template <class TypeOfValue>
void Description<TypeOfValue>::Show(){
Console::WriteLine(L"{0}: {1}", Message, Value);
}
Но вот когда пишешь реализацию конструктора и деструктора в *.h файле, а остальные методы — в *.cpp, то все компилируется нормально. Без каких — либо ошибок линкера.
Подскажите в чем проблема. Неужели необходимо определять конструктор и деструктор шаблона в файле хидера? И никаких путей нет, чтобы определение конструктора и деструктора вынести из *.h файла в *.cpp?