C++ 如何调用模板方法

C++ 如何调用模板方法,c++,templates,C++,Templates,我读到创建模板方法是可能的。我的代码中有类似的东西 档案:Student.h class Student { public: template<class typeB> void PrintGrades(); }; 班级学生 { 公众: 模板 无效打印等级(); }; 文件:Student.cpp #include "Student.h" #include <iostream> template<class typeB> void S

我读到创建模板方法是可能的。我的代码中有类似的东西

档案: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;
}
#包括“Student.h”
#包括
模板
无效学生::打印成绩()
{
typeB s=“这是字符串”;

std::cout模板未在任何地方实例化,导致链接器错误

对于在头文件中定义的模板,编译器将自己生成实例化,因为它可以访问其定义。但是,对于在.cpp文件中定义的模板,您需要自己实例化它们

尝试将此行添加到.cpp文件的末尾:

template void Student::printGrades<std::string>();
模板void Student::printGrades();

我不认为这是重复的。那篇文章讨论的是模板类,而不是模板方法
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
template void Student::printGrades<std::string>();