Flaker
@Flaker

Как исправить ошибку LNK2019 связанную с template?

Сама ошибка:
1>main.obj : error LNK2019: unresolved external symbol "public: static void __cdecl Furdarius::MatrixHelpers::inputFromFile<int>(class Furdarius::Matrix<int> &,class std::basic_fstream<char,struct std::char_traits<char> > &)" (??$inputFromFile@H@MatrixHelpers@Furdarius@@SAXAAV?$Matrix@H@1@AAV?$basic_fstream@DU?$char_traits@D@std@@@std@@@Z) referenced in function "class Furdarius::Matrix<int> __cdecl initMatrixFromFile(class std::basic_fstream<char,struct std::char_traits<char> > &)" (?initMatrixFromFile@@YA?AV?$Matrix@H@Furdarius@@AAV?$basic_fstream@DU?$char_traits@D@std@@@std@@@Z)


Код который ее генерит:

// MatrixHelpers.h
class MatrixHelpers
    {
    public:
        template<typename _U>
        static void inputFromFile(Matrix<_U> &matrix, std::fstream &file);


// MatrixHelpers.cpp
template<typename _U>
    void MatrixHelpers::inputFromFile(Matrix<_U> &matrix, std::fstream &file)
    {
        for (int i = 0; i < matrix.getSize().row; ++i)
		    for (int j = 0; j < matrix.getSize().col; ++j)
			    file >> matrix[i][j];
    };


Вызов метода в main.cpp
Matrix<int> M(size);
MatrixHelpers::inputFromFile<int>(M, file);
  • Вопрос задан
  • 2973 просмотра
Решения вопроса 2
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Шаблонные функции нельзя описывать в отдельных cpp файлах. Пишите тело метода прямо в h файле.
Ответ написан
@vilgeforce
Раздолбай и программист
Попробуйте template в хидер вынести.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmitryKovalskiy
программист средней руки
Так, на всякий случай. А после закрывающей скобки class{} есть ";"?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы