Почему возникает ошибка компиляции неопределённая ссылка при реализации в .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()». Почему?
Например, реализация шаблонного кода помещена в .cpp файл, хотя она должна находиться полностью в подключаемом .h файле." И когда задаете вопросы, читайте описания меток - метка "шаблон" означает "шаблоны проектирования".
– Harry Mar 05 '21 at 13:03TestClass<T>::v()- для какогоT- вы будете инстанцировать? Еще раз - вы не знаете, что будет написано вmain.cpp, для того и раздельная компиляция. – Harry Mar 05 '21 at 13:29