C ++头文件和源目录

时间:2012-04-16 17:42:31

标签: c++ gcc directory-structure undefined-reference

我有以下文件:

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来编译并正确运行同一目录中的所有文件,但是当它们像这样分解时却没有。

3 个答案:

答案 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中添加了相同的签名。