链接C ++中的错误 - 实现indexList

时间:2009-04-07 01:01:33

标签: c++ symbols

Linking... 
Directory.obj : error LNK2019: unresolved external symbol "public: void __thiscall indexList<class entry,100>::read(class std::basic_istream<char,struct std::char_traits<char> > &)" (?read@?$indexList@Ventry@@$0GE@@@QAEXAAV?$basic_istream@DU?$char_traits@D@std@@@std@@@Z) referenced in function _main

获取此错误以及与indexList实现相关的其他错误。我已经包含了所有正确的文件,不确定这意味着什么?

indexList.h
indexList.cpp

另外,使用VS .NET 2003 - 它们位于“源文件”和“头文件”下但是,我测试了删除indexLish.h并且错误没有改变?

3 个答案:

答案 0 :(得分:2)

你拥有的是一个类模板。这意味着当编译器需要调用函数时,它将查看模板定义并根据需要生成相应的代码。

例如,如果尝试调用它,则以下可能中有一个编译时错误:

template <typename T>
void doSomething(const T& x) {
    x->_this_function_does_not_exist_ever_();
}

但只要您不致电doSomething,就不会有错误。

你遇到的问题是你的头文件告诉编译器“嘿,这些函数存在”,但是当编译器试图生成它们时,它找不到任何定义。 (您不能在源文件中“编译”定义并将它们链接起来,它们必须对调用者可见。)

最常见的解决方案是在.h.hpp文件中简单定义整个类模板。

答案 1 :(得分:1)

您是否正在使用visual studio,然后将这两个文件包含在解决方案中然后运行。

答案 2 :(得分:1)

由于您使用的是模板,因此最好的方法是在.H文件中包含该定义。

我从这个book读了一些东西。这里something也可以帮到你。