模板和operator<<操作符一起使用出错了
template<class _Ty, size_t _Size>
class array;
class Package
{
public:
template<class T, size_t N>
friend Package& operator<<(Package& pg, std::tr1::array<T, N> arr)
{
// ...
}
// ...
};
可以编译通过, 但是加入下面的使用, 编译就报错
std::tr1::array<int, 10> arr = {3};
Package pg;
pg << arr;
error LNK2019: 无法解析的外部符号 "class Package & __cdecl operator<<<int,10>(class Package &,class std::tr1::array<int,10>)" (??$?6H$09@@YAAAVPackage@@AAV0@V?$array@H$09@tr1@std@@@Z),该符号在函数 _main 中被引用
请问怎么解决啊.....
[解决办法]
vs 2010 通过编译
#include <array>class Package{public: template<class T, size_t N> friend Package& operator<<(Package& pg, std::tr1::array<T, N> const& arr) { return pg; }};int main(){ Package pkg; std::tr1::array<int, 3> arry; pkg << arry; return 0;}
[解决办法]
LNK2019 无法解析的外部符号 缺少实现部分,你把这代码放在一个文件是不会有问题的。就看你是怎么引用的了