【发布时间】:2014-06-10 21:53:11
【问题描述】:
我有以下在 VC6 中编译的代码:
文本.h:
template <typename T>
class CTextT
{
public:
friend CTextT add(const CTextT& text1, const CTextT& text2) ;
friend CTextT operator+(const CTextT& string1, const CTextT& string2)
{
return ::add(string1, string2);}
}
....................
};
在标题的末尾
#include "Text.inl"
Text.inl:
template <typename T>
CTextT<T> add(const CTextT<T>& text1, const CTextT<T>& text2)
{
CTextT<T> temp ;
// do something
return temp ;
}
但是 VC2010 给我 LINK 错误:
error LNK2019: unresolved external symbol "class CTextT<char> __cdecl add(class CTextT<char> const &,class CTextT<char> const &)" (?add@@YA?AV?$CTextT@D@@ABV1@0@Z)
referenced in function "class CTextT<char> __cdecl operator+(class CTextT<char> const &,class CTextT<char> const &)" (??H@YA?AV?$CTextT@D@@ABV0@0@Z)
1>.\Debug\UnitTestText.exe : fatal error LNK1120: 1 unresolved externals
如果我将代码放在 Text.h 中,它编译得很好。但我不想这样做,因为我想保持声明从实施中保持干净。我不明白为什么当函数在类外时链接器会在这种情况下抱怨?这是唯一的问题,而且类非常大,还有其他友元函数返回 CTextT。
【问题讨论】:
-
在
CTextT类模板的声明前添加template <typename T> class CTextT; template <typename T> CTextT<T> add(const CTextT<T>& text1, const CTextT<T>& text2);。 -
@πάνταῥεῖ 仔细阅读后你是对的。道歉:(
标签: c++ visual-studio-2010 templates hyperlink friend