使用模板时出现“错误LNK2019:未解析的外部符号”

时间:2012-07-16 21:15:07

标签: c++ templates

  

可能重复:
  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 *)”。谁知道我哪里错了?非常感谢!

3 个答案:

答案 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)

模板应该在标题中实现,或者您可以使用模板函数/类的显式实例化