0

我有以下文件:

listDriverTest.cpp
src/List.cpp
headers/List.h

List.cpp 中的包含是

#include "../headers/List.h"

listDriverTest.cpp 中的包含是

#include "headers/List.h"

当我使用以下语句编译时,

g++ listDriverTest.cpp "src/List.cpp"

我最终得到了相当多的“未定义参考”错误,例如

listDriverTest.cpp:(.text+0x81): undefined reference to `List<int>::List()'
listDriverTest.cpp:(.text+0x8f): undefined reference to `List<int>::add(int)'
listDriverTest.cpp:(.text+0x9d): undefined reference to `List<int>::add(int)'
...

我应该如何正确使用包含和编译这三个文件才能使编译正常工作?我已经让 listDriverTest.cpp 编译并正确运行同一目录中的所有文件,但当它们像这样被分解时却不是。

4

3 回答 3

1

请参阅我在模板类的子项也必须是模板类中的回答吗?.

这可能是一个不同的问题,但同样的答案也适用。

于 2012-04-16T17:46:09.233 回答
1

看起来编译 src/List.cpp 生成的目标文件已经包含特化 List,但它与 listDriversTest.cpp 的目标文件位于不同的目录中。因此,链接器找不到它。

当然,这取决于您如何组织模板代码。

于 2012-04-16T18:00:16.403 回答
0

您的程序在我的机器上正确编译。
只需删除 src/List.cpp 周围的双引号我认为你的问题是别的。

我在 list.cpp 中添加了一个函数 void list(void) ,它打印了“list”。
list.h 中添加了相同的签名。

于 2012-04-16T17:50:51.760 回答