我有以下文件:
listDriverTest.cpp
src/List.cpp
headers/List.h
List.cpp中的include是
#include "../headers/List.h"
listDriverTest.cpp中的include是
#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来编译并正确运行同一目录中的所有文件,但是当它们像这样分解时却没有。
答案 0 :(得分:1)
在Must a child of a template class also be a template class?中查看我的回答。
这可能是一个不同的问题,但同样的答案适用。
答案 1 :(得分:1)
通过编译src / List.cpp生成的目标文件看起来已经包含了特化列表,但它与listDriversTest.cpp的目标文件位于不同的目录中。因此,链接器找不到它。
当然,这取决于您如何组织模板代码。
答案 2 :(得分:0)
您的程序在我的机器上正确编译。
只需删除src / List.cpp周围的双引号即可
我认为你的问题是另一回事。
我在list.cpp中添加了一个函数void list(void),它打印了“list”。
list.h中添加了相同的签名。