首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板跟operator<<操作符一起使用出错了

2012-09-25 
模板和operator操作符一起使用出错了templateclass _Ty, size_t _Sizeclass arrayclass Package{publ

模板和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 通过编译

C/C++ code
#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 无法解析的外部符号 缺少实现部分,你把这代码放在一个文件是不会有问题的。就看你是怎么引用的了

热点排行