0
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 并且错误没有改变?

4

3 回答 3

2

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

例如,如果尝试调用以下代码,可能会出现编译时错误:

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

但只要你不打电话doSomething,你就不会出错。

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

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

于 2009-04-07T01:12:23.927 回答
1

您是否使用 Visual Studio,然后将这两个文件都包含到解决方案中,然后运行。

于 2009-04-07T01:07:19.460 回答
1

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

我从这本书中读到了一些东西。这也可能对您有所帮助。

于 2009-04-07T01:08:13.170 回答