我在代码中使用模板,而LNK2019始终存在错误.这是我的代码的一部分:
Method.h
template<typename type>
void Method(Model<type>* sys);
Run Code Online (Sandbox Code Playgroud)
Method.cpp
template<typename type>
void Method(Model<type>* sys){ blablabla;}
Run Code Online (Sandbox Code Playgroud)
Model.h
template<typename type>
class Model{ blablabla;}
class Model1:public Model<double>{ blablabla;}
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
Model<double> *sys=new Model1();
Method(sys);
Run Code Online (Sandbox Code Playgroud)
但是,始终显示错误LNK2019:函数_main中引用的未解析的外部符号"void __cdec1 Method(class Model*)".谁知道我哪里错了?非常感谢!
Dri*_*ise 16
模板应该在标题中实现.
Method.h
template<typename type>
void Method(Model<type>* sys){ /*Your code here*/ };
Run Code Online (Sandbox Code Playgroud)
另见:https://stackoverflow.com/a/495056/868546
来自Mark Ransom:
在.cpp文件中,编译器无法猜测在其他文件中使用该函数时模板参数是什么,因此它不会生成任何实际代码.链接器注意到缺少代码和抱怨.
通常的方法是在头文件中定义整个函数体,就像内联函数一样,因此编译器可以在看到填充模板参数的函数时发出代码.
在.cpp文件中,编译器无法猜测在其他文件中使用该函数时模板参数是什么,因此它不会生成任何实际代码.链接器注意到缺少代码和抱怨.
通常的方法是在头文件中定义整个函数体,就像内联函数一样,因此编译器可以在看到填充模板参数的函数时发出代码.