У меня возникли проблемы с тем, почему я получаю неразрешенный внешний символ при создании экземпляра класса шаблона.Неразрешенный внешний символ при вызове шаблона ctor
Строка, которая вызывает ошибку компоновщика является вызов новым ниже:
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, class CustomVertex * *, int, unsigned long *)" (? 0? $ Vbo @ VCustomVertex @@ @@ QAE @ HPAPAVCustomVertex @@ HPAK @ Z), на которые ссылается функция «private: bool __thiscall Actor :: InitializeGeometry (класс IGeometry &)» (? InitializeGeometry @ Actor @@ AAE_NAAVIGeometry @@@ Z) 1> C: \ cuprofen \ Debug \ Cuprofen.exe: фатальная ошибка LNK1120: 1 неразрешенные внешние
Может ли кто-то определить мой надзор?
Да, конструктор Vbo определен в файле .cpp. Я попробую переместить все в файл заголовка. –
Спасибо, интересный ответ. Я переместил код Vbo в заголовок, и теперь моя ошибка компоновщика исчезла. Можете ли вы определить «единица перевода»? –
@freefallr: Говоря свободно, это означает один исходный файл, плюс все, что включено в него. –