1

我的项目是用 C++ 编写一个程序,该程序创建一个用户定义的、列表实现的堆栈和队列,用于检查逐字母回文和逐字回文。所以我需要有一个堆栈和队列来检查字符和字符串类型。由于它是一个中级编程项目(我的 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

谢谢

4

1 回答 1

1

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

任何一个:

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

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

于 2012-11-06T00:39:13.993 回答