1

有人可以告诉我以下错误意味着什么吗?

错误 2 错误 LNK2019:函数中引用了无法解析的外部符号“public: class TLst & __thiscall TLst::operator=(class TLst const &)”(??4?$TLst@VTInt@@@@QAEAAV0@ABV0@@Z) “公共:void __thiscall TPair >::GetVal(class TInt &,class TLst &)const " (?GetVal@?$TPair@VTInt@@V?$TLst@VTInt@@@@@@QBEXAAVTInt@@AAV?$ TLst@VTInt@@@@@Z) randomgraph.obj 随机图

4

3 回答 3

4

一般来说,这意味着链接器看到了对符号的引用,但它在任何地方都找不到它——通常是由于缺少库或目标文件。

这种情况下,这是因为您在 .cpp 文件中实现了模板化类的成员函数——它们应该在标题中实现。

模板类是模板而不是类。当编译器看到您使用例如它从模板vector<int> f;创建一个新类。为了创建例如,它需要在模板被实例化的地方查看实现——如果实现不在头文件中,它就不能这样做。vector<int>vectorvector<int>::size()size()size()

您可以通过显式实例化vector来解决此问题int- 然后编译器将在编译 cpp 文件时看到显式实例化。这违背了拥有模板的目的——它只能用于您通过显式实例化预定义的类型。所以,简短的故事,总是在头文件中完全实现模板。

于 2011-03-13T22:02:54.883 回答
1

Unresolved external symbol表示存在链接器找不到的引用。这通常是由于忘记将目标文件或库添加到链接步骤造成的。(包括一个类的头文件是不够的 - 您还必须添加实现代码。)

于 2011-03-13T22:02:21.847 回答
0

这个问题就解决了。在模板类 TLst 中,函数

TLst TLst::operator=(const TLst&);

已声明但未定义。

我必须在我的 .cpp 文件中定义函数。我也可以在我的头文件中定义它。

感谢您的回复。

索姆纳特

于 2011-03-15T04:10:58.380 回答