Неопределённая ссылка на функцию шаблона класса
Почему возникает ошибка компиляции неопределённая ссылка при реализации в .cpp файле шаблонного кода, объявленного в .h файле?
Например, есть три файла:
main.cpp
#include "TestClass.h"
int main() {
TestClass<char> testClass;
testClass.v();
}
TestClass.h
#ifndef FILTER_TESTCLASS_H
#define FILTER_TESTCLASS_H
#include <iostream>
template <typename T>
class TestClass {
public:
void v();
};
#endif //FILTER_TESTCLASS_H
TestClass.cpp
#include "TestClass.h"
template <typename T>
void TestClass<T>::v() {
std::cout << "abc\n";
}
Компилятор говорит: неопределённая ссылка на «TestClass<char>::v()». Почему?