使用模板时未解析的外部符号

时间:2012-11-06 00:05:20

标签: list templates external

我的项目是用C ++编写一个程序,它创建一个用户定义的,列表实现的堆栈和队列,用于检查逐个字母的回文和逐字回文。所以我需要一个堆栈和队列来检查char和string类型。由于它是一个用于中间编程的项目(我的C ++序列中的第三个课程),我们不能使用STL列表/队列/堆栈对象,我们还没有学习模板。但我觉得必须为字符串或字符串输入编写不同的实现并想使用模板很烦人。

当所有代码都在一个文件下时,我让程序运行得很好 - 类和它们的实现都在我的main.cpp中。但我将代码拆分,将类定义放在list.h中,将实现放在list.cpp中,并将驱动程序代码保存在main.cpp中。

现在,当我跑步时,我收到了这些错误:

Error   1   error LNK2019: unresolved external symbol "public: void __thiscall  Stack<int>::push_front(int)" (?push_front@?$Stack@H@@QAEXH@Z) referenced in function _main  
Error   3   error LNK2019: unresolved external symbol "public: void __thiscall Queue<char>::push_back(char)" (?push_back@?$Queue@D@@QAEXD@Z) referenced in function _main   d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\DACUNTO_HW5P2_TEMP\main.obj  DACUNTO_HW5P2_TEMP
Error   2   error LNK2019: unresolved external symbol "public: int __thiscall Stack<int>::pop_front(void)" (?pop_front@?$Stack@H@@QAEHXZ) referenced in function _main  d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\DACUNTO_HW5P2_TEMP\main.obj  DACUNTO_HW5P2_TEMP
Error   4   error LNK2019: unresolved external symbol "public: char __thiscall Queue<char>::pop_back(void)" (?pop_back@?$Queue@D@@QAEDXZ) referenced in function _main  d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\DACUNTO_HW5P2_TEMP\main.obj  DACUNTO_HW5P2_TEMP
Error   5   error LNK1120: 4 unresolved externals   d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\Debug\DACUNTO_HW5P2_TEMP.exe 1   1   DACUNTO_HW5P2_TEMP

我不知道为什么会发生这种情况,但程序在一个文件下运行时运行正常。这是我的代码:

main.cpp:http://pastebin.com/mQW4EV99

list.h:http://pastebin.com/Lze6jZv2

list.cpp:http://pastebin.com/7bks6Bt1

谢谢

1 个答案:

答案 0 :(得分:1)

编译器希望模板的定义在使用时可见。

或者:

  • 将定义移至类声明(例如,类似于List的构造函数)
  • #include .cpp(并为了您的理智而更改其扩展名)

当您听到模板可以增加编译时间时,这就是主要原因。

相关问题