可能重复:
Why do I get “unresolved external symbol” errors when using templates?
我在代码中使用模板,而LNK2019始终存在错误。这是我的代码的一部分:
Method.h
template<typename type>
void Method(Model<type>* sys);
Method.cpp
template<typename type>
void Method(Model<type>* sys){ blablabla;}
Model.h
template<typename type>
class Model{ blablabla;}
class Model1:public Model<double>{ blablabla;}
Main.cpp的
Model<double> *sys=new Model1();
Method(sys);
但是,总是会显示错误LNK2019:函数_main中引用的未解析的外部符号“void __cdec1 Method(class Model *)”。谁知道我哪里错了?非常感谢!
答案 0 :(得分:16)
模板应该在标题中实现。
Method.h
template<typename type>
void Method(Model<type>* sys){ /*Your code here*/ };
另请参阅:https://stackoverflow.com/a/495056/868546
来自Mark Ransom:
在.cpp文件中,当您在其他文件中使用该函数时,编译器无法猜测模板参数是什么,因此它不会生成任何实际代码。链接器注意到缺少代码和抱怨。
通常的方法是在头文件中定义整个函数体,就像内联函数一样,因此编译器可以在看到填充了模板参数的函数时发出代码。
答案 1 :(得分:5)
在.cpp文件中,当您在其他文件中使用该函数时,编译器无法猜测模板参数是什么,因此它不会生成任何实际代码。链接器注意到缺少代码和抱怨。
通常的方法是在头文件中定义整个函数体,就像内联函数一样,因此编译器可以在看到填充了模板参数的函数时发出代码。
答案 2 :(得分:0)
模板应该在标题中实现,或者您可以使用模板函数/类的显式实例化。