У вас есть шаблон класса. Это означает, что когда компилятору нужно вызвать функцию, он будет смотреть на определение вашего шаблона и генерировать соответствующий код по мере необходимости.
Например, следующее , вероятно, содержит ошибку времени компиляции, если попытаться вызвать ее:
template <typename T>
void doSomething(const T& x) {
x->_this_function_does_not_exist_ever_();
}
Но если вы не позвоните doSomething
, вы не получите ошибок.
Проблема, с которой вы столкнулись, заключается в том, что ваш заголовочный файл сообщает компилятору: «Эй, эти функции существуют», но когда компилятор пытается их сгенерировать, он не может найти никаких определений. (Вы не можете «скомпилировать» определения в исходном файле и связать их, они должны быть видны вызывающей стороне.)
Наиболее распространенным решением является простое определение всего шаблона класса в файле .h
или .hpp
.