我是新手,从“C ++ Primer 5th edition”,p110开始练习,其中: 编写一个程序来打印矢量的大小和内容,如下所示。
(a)vector<int> v1;
(b)vector<int> v2(10);
(f)vector<string> v6{10};
(g)vector<string> v7{10, "hi"};
我可以使用模板函数处理上面的字符串和int向量吗? 我写了一个这样的函数:
template<class t>
void check_vector(vector<t> *_v)
{
if(_v->begin() == _v->end())
{
cout << "the vector is empty\n";
}
else
{
int i=0;
for(vector<t>::iterator it = _v->begin(); it != _v->end(); it++) //error.
{
cout << *it;
i++;
}
cout << "\nthe size is : "
<<i
<<"\n";
}
}
在'std :: vector :: iterator'之前生成的错误是 need'typename',因为'std :: vector'是一个依赖范围。
有可能这样做吗? 如果是这样,我该如何修复代码? THX。
答案 0 :(得分:2)
编译器非常清楚地告诉你写
for(typename vector<t>::iterator it = _v->begin(); it != _v->end(); it++)
// ^^^^^^^^
修复它。你试过吗?
至少
typedef typename vector<t>::iterator It;
for(It it = _v->begin(); it != _v->end(); it++)
应该有用。