template <class T>
CList<T>:: ~CList()
{
//...
}
Линковщик не видит методов класса...
//items.hpp
template <class T>
class CList
{
public:
CList();
~CList();
//... и т.д.
//...
protected:
T t_data;
};
//items.cpp
#include "items.hpp"
template <class T>
CList<T>:: CList()
{
//...
}
template <class T>
CList<T>:: ~CList()
{
//...
}
-----------------------------------
//main.cpp
#include "items.hpp"
CList<CMyClass> g_SomeList;
-----------------------------------------------------
И в итоге получаю:
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CList<class CMyClass>::CList<class CMyClass>(void)" (??0?$CList@VCMyClass@@@@QAE@PAV0@@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CList<class CMyClass>::~CList<class CMyClass>(void)" (??1?$CList@VCMyClass@@@@QAE@XZ)
Debug/bdm.exe : fatal error LNK1120: 2 unresolved externals
----------------------------------------------------------------------
Вот не вижу нафига линковщик докапывается...
Пpичём если реализацию методов делаю в том же файле, в котором
класс объявляю(т.е. items.hpp) - тогда всё работает...
ПРичём, такая фигня только с классами в которых шаблоны используются...
Оптимально их даже даже реализовывать не отдельно от класса так:
Код:
А прямо внутри описания класса, как в Java:
Код:
template <class T>
class CList
{
public:
CList(){
//.....
}
~CList(){
//.....
}
void someMethod(){
//...
}
//... и т.д.
//...
protected:
T t_data;
};
class CList
{
public:
CList(){
//.....
}
~CList(){
//.....
}
void someMethod(){
//...
}
//... и т.д.
//...
protected:
T t_data;
};
еще тут можно почитать
Спасибо. Буду думать как выкрутиться...