我正在尝试创建一个模板函数,它接受任何类型的T参数(现在是原语)并打印出其内容:
template<class T>
void displayContents(const vector<T>& data)
{
vector<T>::const_iterator i;
i=data.begin();
for( ; i!=data.end(); i++){
cout<<*i<endl;
}
}
错误消息是:
在函数'void displayContents(const std :: vector&gt;&amp;)'中: 错误:预期';'在'我'之前 错误:'i'未在此范围内声明 ===构建完成:2个错误,0个警告===
我是否忽略了语法错误?
答案 0 :(得分:5)
尝试以下方法:
typename vector<T>::const_iterator i;
正如Björn在评论中已经指出的那样,它是必需的,因为它是模板的从属名称。
答案 1 :(得分:3)
如果您的目标是输出每个元素,则不应将自己约束为向量。惯用的通用解决方案是传递两个迭代器:
template<typename ForwardIterator>
void display_contents(ForwardIterator begin, ForwardIterator end)
{
for (ForwardIterator it = begin; it != end; ++it)
{
std::cout << *it << '\n';
}
}
然后你可以使用带有向量,集合和几乎所有其他容器的模板:
int main()
{
std::vector<int> a {2, 3, 5, 7};
display_contents(a.begin(), a.end());
std::set<int> b {11, 13, 17, 19};
display_contents(b.begin(), b.end());
}