Скорее всего инстанцирование класса находится в одной единице трансляции, а определение функции - в другой.
Поскольку код функции генерируется во время инстанцирования класса, то на момент инстанцирования компилятор должен знать какой тип "подставить" в функцию. Если определение находится в другой единице трансляции, то у компилятора, который компилирует файл с объявлением, нет возможности сгенерировать нужную функцию.
После компиляции, линкер пытается решить зависимости и не находит нужную функцию, потому что она не сгенерировалась.
Чтобы избежать этого, поместите определение функции в хедер с объявлением.
Вот
похожая проблема.