Как вызвать шаблонный метод [duplicate]

0

Я читал, что можно создать шаблонный метод. В моем коде есть что-то подобное

Файл: Student.h

class Student
{
public:
    template<class typeB> 
    void PrintGrades();
};

Файл: Student.cpp

#include "Student.h"
#include <iostream>

template<class typeB> 
void Student::PrintGrades()
{
    typeB s= "This is string";
    std::cout << s;
}

Теперь в main.cpp

Student st;
st.PrintGrades<std::string>();

Теперь я получаю компоновщик Ошибка:

Error   1   error LNK2019: unresolved external symbol "public: void __thiscall Student::PrintGrades<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??$PrintGrades@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Student@@QAEXXZ) referenced in function _main

Любое предложение о том, что я могу делать неправильно?

Теги:
templates

1 ответ

1
Лучший ответ

Шаблон не создается нигде, вызывая ошибку компоновщика.

Для шаблонов, определенных в заголовке, компилятор будет генерировать экземпляр сам по себе, поскольку он имеет доступ к его определению. Однако для шаблонов, определенных в файле.cpp, вам необходимо создать их самостоятельно.

Попробуйте добавить эту строку в конец вашего.cpp файла:

template void Student::printGrades<std::string>();
  • 0
    Это сделало трюк

Ещё вопросы

Сообщество Overcoder
Наверх
Меню