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

ningto.com 2012-09-21 01:20:25
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 中被引用

请问怎么解决啊.....
...全文
173 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningto.com 2012-09-21
  • 打赏
  • 举报
回复
知道原因了, 我把实现放到cpp里面去了, 模板不支持分开编译
ningto.com 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
#include <iostream>
using namespace std;

template<class _Ty, size_t _Size>
class array{

public:
array(){
strcpy(a,"hello");
}

_Ty a[_Size];


};

class Package
{
public:
template……
[/Quote]
array是不能改的, 这是tr1里面的
ningto.com 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:
LNK2019 无法解析的外部符号 缺少实现部分,你把这代码放在一个文件是不会有问题的。就看你是怎么引用的了


lz已经在类内部定义了函数
[/Quote]
std::tr1::array<T, N> const& arr
你传的是引用, 我想传值, 怎么办啊
mujiok2003 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
LNK2019 无法解析的外部符号 缺少实现部分,你把这代码放在一个文件是不会有问题的。就看你是怎么引用的了
[/Quote]

lz已经在类内部定义了函数
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

template<class _Ty, size_t _Size>
class array{

public:
array(){
strcpy(a,"hello");
}

_Ty a[_Size];


};

class Package
{
public:
template<class T, size_t N>
friend Package& operator<<(Package& pg, array<T, N> arr)
{
strcpy(pg.a,arr.a);
return pg;
}
char a[100];
};

void main()
{
array<char, 10> arr;
Package pg;
pg << arr;
cout<<pg.a<<endl;

}

稍微加点东西,就可以编译
  • 打赏
  • 举报
回复
LNK2019 无法解析的外部符号 缺少实现部分,你把这代码放在一个文件是不会有问题的。就看你是怎么引用的了
mujiok2003 2012-09-21
  • 打赏
  • 举报
回复
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;
}

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧