Всем добрый день. В классе Matrix, что определён в файле Matrix.h у меня есть шаблон функции:
Matrix.h:
template<class T> void func(T *arr);
В файле Matrix.cpp есть определение этой функции:
Matrix.cpp:
template<class T>
void Matrix::func(T *arr)
{
for (int i = 0; i < 4; i++)
std::cout << arr[i] << std::endl;
std::cout << std::endl;
}
В другом же файле - InverseMatrix - я хочу передать в эту функцию указатель на массив типа string:
InverseMatrix.cpp:
string arrx[] = { "x1", "x2", "x3", "x4" };
func(arrx);
Это, в свою очередь, приводит к ошибке:
InverseMatrix.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Matrix::func<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)" (??$func@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Matrix@@QAEXPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) в функции "public: void __thiscall InverseMatrix::print(void)" (?print@InverseMatrix@@QAEXXZ)
В чём может быть проблема? Примечательно, что есть всё это будет в одном файле, то никаких проблем не появится. P.S.: Понятное дело, что это всего лишь максимально упрощённый пример моей реальной функции, утомлять тонкостями реализации которой я не нахожу нужным.