【发布时间】:2012-02-08 20:20:50
【问题描述】:
可能重复:
Why can templates only be implemented in the header file?
我最近一直在尝试使用 C++。 目前我正在尝试编写一些我确信每个人都至少做过一次的事情:一个简单的 LinkedList 类。 代码已完成,但我不知何故无法编译它。我一直在谷歌搜索,似乎我将目标文件链接错了。我的代码基本上是这样的:
test.cpp
#include "linkedlist.h"
int main()
{
LinkedList<int> list;
// do something
}
链表.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是一个模板类,该类的用户需要所有方法的完整定义。一种方法是将所有方法内联在类中,而另一种方法是将方法放在单独的文件中并将它们包含在头文件中。 -
@Mike:很难称其为“重复”。这就是事情变得模糊的地方——问题是完全不同的,即使我们不需要再次涵盖相同的领域。 :)
-
@MikeSeymour:滑坡,那个。关于 SO 的大量答案可能对完全不相关的问题有好处!不过,我只是很难。
-
正如我所说,在决定在这里提问之前,我一直在寻找答案。虽然它涵盖了同样的问题,但我不知道这可能是原因。可能是因为我在 g++ 之前用过 VS10,它在那里工作得很好。