3

可能重复:
为什么在使用模板时会出现“未解析的外部符号”错误?

我在我的代码中使用模板,但总是出现错误 LNK2019。这是我的代码的一部分:

方法.h

template<typename type>
void Method(Model<type>* sys);

方法.cpp

template<typename type>
void Method(Model<type>* sys){ blablabla;}

模型.h

template<typename type>
class Model{ blablabla;}

class Model1:public Model<double>{ blablabla;}

主文件

Model<double> *sys=new Model1();
Method(sys);

但是,总是显示错误 LNK2019: unresolved external symbol "void __cdec1 Method(class Model*)" referenced in function_main. 有人知道我哪里出错了吗?非常感谢!

4

3 回答 3

20

模板应在标头中实现。

方法.h

template<typename type>
void Method(Model<type>* sys){ /*Your code here*/ };

另请参阅:https ://stackoverflow.com/a/495056/868546

马克赎金

在 .cpp 文件中,当你在其他文件中使用该函数时,编译器无法猜测模板参数是什么,因此它不会生成任何实际代码。链接器注意到缺少代码并抱怨。

通常的方法是在头文件中定义整个函数体,就像一个内联函数,这样编译器可以在看到正在使用的函数被填充模板参数时发出代码。

于 2012-07-16T21:17:25.090 回答
7

在 .cpp 文件中,当你在其他文件中使用该函数时,编译器无法猜测模板参数是什么,因此它不会生成任何实际代码。链接器注意到缺少代码并抱怨。

通常的方法是在头文件中定义整个函数体,就像一个内联函数,这样编译器可以在看到正在使用的函数被填充模板参数时发出代码。

于 2012-07-16T21:18:38.260 回答
0

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

于 2012-07-16T21:21:01.593 回答