返回信息流想将容器作为模板的参数传,比如vector<int> vector<string> list<int>等,但是编译器会报错
请问容器的类型能这么传吗?或者有没有更巧妙的方法呢?
报错代码:
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void show(T t){
for(T::iterator iter = t.begin(); iter != t.end(); ++iter){
cout<<*iter<<endl;
}
}
void fun(){
vector<int> vec;
int n;
for(int i=0;i<10;++i){
cin>>n;
vec.push_back(n);
}
show(vec);
}
int main(){
fun();
return 0;
}
-------------------------------
跟新~
多谢楼下的各位·
最后发现的错误时LZ没加typename····
加了typename就没问题了!!
在c++ primer 模板与泛型编程(LZ的书是16.1.4 P532) 有讲如果要显示的告诉编辑器形参是一个类型
要在前面加上typename关键字!!!
跟新后代码:
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void show(T t){
for(typename T::iterator iter = t.begin(); iter != t.end(); ++iter){
cout<<*iter<<endl;
}
}
void fun(){
vector<int> vec;
int n;
for(int i=0;i<10;++i){
cin>>n;
vec.push_back(n);
}
show(vec);
}
int main(){
fun();
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #82111同步于 2014/9/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
模板与容器一起使用的疑惑
jiaozi
2014/9/4镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
没看出错误来,报的什么错
【 在 jiaozi 的大作中提到: 】
: 想将容器作为模板的参数传,比如vector<int> vector<string> list<int>等,但是编译器会报错
: 请问容器的类型能这么传吗?或者有没有更巧妙的方法呢?
: 报错代码:
: ...................
我猜是传参的问题,vector我记得没有复制构造函数吧,再说,模板函数为了减少莫名错误,都是引用传参,他这里不是。
【 在 gaoweiwei 的大作中提到: 】
: 没看出错误来,报的什么错
有copy ctor,用引用确实更合理,但不应该出现编译错误的,不知道lz用的什么版本的编译器
【 在 gdl 的大作中提到: 】
: 我猜是传参的问题,vector我记得没有复制构造函数吧,再说,模板函数为了减少莫名错误,都是引用传参,他这里不是。
容器有copy constructor,需要加typename, typename T::iterator ... ,这样编译器才知道 T::iterator是个类型,否则iterator是啥不知道,是成员?类型?函数?推荐看《effective c++》
typename与class的区别一节
是的~最后编译成功~多谢!
【 在 wangxiaobupt 的大作中提到: 】
: 我为了测试方便 改了push back方法 和 最后的cout方法
: 最后提示 需要加个typename
: [upload=1][/upload]