运算符重载与函数的问题···

xiaohutushen30 2012-10-31 10:21:56
#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
/*template<typename T>
void print(const T&t){
typename T::const_iterator iter;
for(iter=t.begin();iter!=t.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
}*/
可以正常使用这个函数。
template<typename T>
ostream&operator<<(ostream&out,const T&t){
typename T::const_iterator iter;
for(iter=t.begin();iter!=t.end();++iter){
cout<<*iter<<" ";
}
return out;
}
重载之后的<<在不调用的情况下可以正常运行,但调用的时候就不行了!
int main(int argc,char *argv[]){
vector<int> mv(5,1);
//print(mv);
cout<<mv<<endl;
return 0;
}
请高人指点,为什么写成函数就可以运行,而写成重载就不行了呢?
但愿高人能指点一下~~~~
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocktyt 2012-10-31
  • 打赏
  • 举报
回复
试了下,改成这样可以用了

template<typename T, typename _Elem, typename _Traits>
basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& out,const T&t){
typename T::const_iterator iter;
for(iter=t.begin();iter!=t.end();++iter){
out<<*iter<<" ";
}
return out;
}
rocktyt 2012-10-31
  • 打赏
  • 举报
回复
顺便这个问题跟友元函数完全没关系
rocktyt 2012-10-31
  • 打赏
  • 举报
回复
这样定义会造成你自己重载的模板<<运算符覆盖了原本的<<,在out<<*iter的时候无法判断是递归还是调用原本的<<。

解决方法我不知道,但是如果有Concept就很容易解决
xiaohutushen30 2012-10-31
  • 打赏
  • 举报
回复
我想要做的是一个通用的输出!并且这样的输出是通过重载<<输出的!例如可以这样:
list<int> ml;
vector<int> mv;
deque<int> md;
cout<<ml<<endl;
cout<<mv<<endl;
cout<<md<<endl;
就是说一般类型容器类型都直接可以输出,而不是说每一种容器都重载一个输出运算符,如果大家有什么好的方法也可以提出来!
xiaohutushen30 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
1、声明的时候记得用friend函数;
2、cout<<*iter<<" "改为out<<*iter<<" "。
[/Quote]
这个并不是哪一个类的成员函数呀,它不在类里怎么会是友元函数呢?还是不解!
healer_kx 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1、声明的时候记得用friend函数;
2、cout<<*iter<<" "改为out<<*iter<<" "。
[/Quote]
YES
图灵狗 2012-10-31
  • 打赏
  • 举报
回复
1、声明的时候记得用friend函数;
2、cout<<*iter<<" "改为out<<*iter<<" "。

64,642

社区成员

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

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