我的项目是用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
谢谢
答案 0 :(得分:1)
编译器希望模板的定义在使用时可见。
或者:
List
的构造函数)#include
.cpp(并为了您的理智而更改其扩展名)当您听到模板可以增加编译时间时,这就是主要原因。