可能是重复的问题:
为什么只能在头文件中实现模板(template)?
最近我在尝试使用C++编程。目前我正在尝试编写一个简单的链表类,相信每个人都至少做过一次。 代码已经完成,但我似乎无法编译它。我已经搜索了谷歌,看起来像是我链接对象文件不正确。这就是我的代码基本结构:
test.cpp
#include "linkedlist.h"
int main()
{
LinkedList<int> list;
// do something
}
链表头文件 linkedlist.h
template <typename T>
class LinkedList
{
// a lot of function and variable definitions
}
然后有一个名为linkedlist.cpp的.cpp文件,其中包含LinkerList类的所有实际代码。当尝试使用以下命令编译test.cpp时:
g++ ..\src\test.cpp
我被告知出现了“LinkedList::LinkedList()”的未定义引用。因此,我认为由于存在多个.cpp文件,它们的链接方式不正确,所以我尝试了以下方法:
g++ -c -Wall -O2 ..\src\test.cpp
g++ -c -Wall -O2 ..\src\linkedlist.cpp
g++ -s test.o linkedlist.o
然而,这并没有改变什么。错误消息仍然是一样的。 我一直在尝试在互联网上找到一些信息,然而,它并没有真正起到作用。
LinkedList
是一个模板类,该类的用户需要所有方法的完整定义。一种方法是将所有方法内联在类中,另一种方法是将方法放在单独的文件中并将其包含在头文件中。 - Some programmer dude