我读到可以创建模板方法。我的代码中有类似的东西
档案: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
有关我可能做错的任何建议吗?
答案 0 :(得分:1)
模板未在任何地方实例化,导致链接器错误。
对于标头中定义的模板,编译器将自己生成实例化,因为它可以访问其定义。但是,对于.cpp文件中定义的模板,您需要自己实例化它们。
尝试将此行添加到.cpp文件的末尾:
template void Student::printGrades<std::string>();