2011-03-13 71 views
1

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

错误2错误LNK2019:无法解析 外部符号? “公共:类 TLST & __thiscall TLST ::运算=(类 TLST常量&)” (?? 4 $ TLST @ VTInt @@@ @ QAEAAV0 @ ABV0 @@ Z) 函数引用 “市民:无效 __thiscall TPair> :: GETVAL(类色调 &,类TLST &)常量”??? (GETVAL @ $ @ TPair @@ VTInt V $ TLst @ VTInt @@@@@@ QBEXAAVTInt @@ AAV?$ TLst @ VTInt @@@@@ Z)randomgraph.obj randomgraph

+0

什么语言? C++?这是一个链接器错误。 – 2011-03-13 21:58:10

回答

0

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

3

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

这种情况下这是因为您在.cpp文件中实现您的模板class'es成员函数 - 他们应该在标题中实现。

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

你可以通过明确实例化vector来获得int - 然后编译器会在编译cpp文件时看到显式的实例化。这违背了创建模板的目的 - 它只能用于您通过显式实例化预定义的类型。所以,小故事,总是在头文件中完全实现模板。

+0

在头文件中定义的模板类是TVec >>和模板 class TVec {public:typedef TVal * TIter;并且在.cpp文件中,链接器错误即将发生:\t(TNdClss :: TIter CI = ndClss.BegI(); CI ”,CI-> Val1);其中typedef TVec >> TNdClss;在标题中定义。 – 2011-03-14 02:09:41

+1

'TLst&TLst :: operator ='在哪里实现? – Erik 2011-03-14 09:04:18

0

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

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

被宣布,但没有定义。我不得不在我的.cpp文件中定义函数。我也可以在我的头文件中定义它。

感谢您的回复。

Somnath