Мне трудно понять, почему я получаю неразрешенный внешний символ при создании экземпляра класса шаблона.
Строка, которая вызывает ошибку компоновщика, является вызовом new ниже:
Vbo<CustomVertex>* m_pVbo;
...
m_pVbo = new Vbo<CustomVertex> (
geometry.VertCount(),
geometry.Vertices(),
geometry.IndexCount(),
geometry.Indices()
);
// nb: geometry.Vertices return type is CustomVertex**
Определение класса Vbo следующее:
template <typename T>
class Vbo : public glex
{
public:
Vbo();
Vbo( int nNumVerts, T** ppVertices, int nNumIndices, DWORD* pIndices );
Vbo( const Vbo<T> & rhs ); // copy
Vbo<T> & operator=( const Vbo<T> & rhs ); // assignment
~Vbo();
...
}
И реализация конструктора Vbo:
template <typename T>
Vbo<T>::Vbo( int nNumVerts, T** ppVertices, int nNumIndices, DWORD* pIndices ) :
m_bInitialized ( false ),
m_nVboId ( 0 ),
m_nVboIdIndex ( 0 ),
m_nNumVertices ( nNumVerts ),
m_nNumIndices ( nNumIndices ),
m_ppVertices ( ppVertices ),
m_pIndices ( pIndices )
{
glex::Load();
Initialize();
}
И, наконец, жалоба от компоновщика:
1> Actor.obj: ошибка LNK2019: неразрешенный внешний символ "public: __thiscall Vbo :: Vbo (int, класс CustomVertex * *, int, unsigned long *)" (?? 0? $ Vbo @ VCustomVertex @@@ @ QAE @ HPAPAVCustomVertex @@ HPAK @ Z) ссылка на функцию "private: bool __thiscall Actor :: InitializeGeometry (class IGeometry &)" (? InitializeGeometry @ Actor @@ AAE_NAAVIGeometry @@@ Z)
1> C: \ cuprofen \ Debug \ Cuprofen.exe: фатальная ошибка LNK1120: 1 неразрешенный внешний код
Может кто-то заметить мою оплошность?