错误LNK2019是什么意思

时间:2011-03-13 21:55:47

标签: c++ linker lnk2019

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

  

错误2错误LNK2019:未解决   外部符号“公共:阶级   TLst& __thiscall   TLST ::运算符=(类   TLst const&)“   (?? 4?$ @ TLST @@@@ VTInt @ QAEAAV0 @@ ABV0 Z)   在函数“public:void中引用   __thiscall TPair> :: GetVal(类TInt   &,类TLst&)const“   (?GetVal @?$ TPair @ VTInt @@ V?$ TLst @ VTInt @@@@@@ QBEXAAVTInt @@ AAV?$ TLst @ VTInt @@@@@ Z)randomgraph.obj randomgraph

3 个答案:

答案 0 :(得分:4)

通常,这意味着链接器会看到对符号的引用,但它无法在任何地方找到它 - 通常是由于缺少库或目标文件。

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

此问题已解决。在模板类TLst中,函数

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

已宣布,但未定义。

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

感谢您的回复。

索姆纳特