Проблема, которую вы получаете, это ошибка компоновщика, и если бы мне пришлось угадывать, я бы предположил, что ваша проблема в том, что вы разбили свою реализацию на пару .h / .cpp.Для обычных классов C ++ это правильный подход, но при работе с шаблонами вы должны поместить весь код, включая реализацию, в файл заголовка.
Причина этого связана с компиляцией C ++и связь модели и как она играет с шаблонами.С обычным классом компилятор может генерировать код для каждого файла .cpp отдельно, а затем связывать весь код вместе для разрешения внешних ссылок.Проблема этого подхода применительно к шаблонам заключается в том, что шаблоны не являются кодом;это шаблоны для кода, и когда вы компилируете сам шаблон, код не генерируется.Код для шаблонов генерируется только тогда, когда создается экземпляр шаблона, и когда это происходит, код, который должен быть создан, должен быть видимым.Следовательно, если вы скомпилируете файл .cpp, содержащий реализацию класса шаблона, то компилятор не сможет увидеть этот код, когда шаблон фактически используется, и, следовательно, не будет генерировать какие-либо экземпляры этого кода, следовательно, ошибка компоновщика.