可能重复:
Where and why do I have to put the “template” and “typename” keywords?
我在为通用类型的向量声明迭代器时遇到问题。 代码如下:
template <class T> void print(const vector<T>& V )
{
vector<T>::const_iterator i;
}
以下内容返回预期的错误;于我之前'。
如果我明确说明vector<int>::const_iterator i;
有没有办法解决问题?
答案 0 :(得分:3)
const_iterator
是此上下文中的从属名称,因为它取决于T
。除非您使用typename
关键字明确限定类型,否则不会命名类型。
template <class T> void print(const vector<T>& V )
{
typename vector<T>::const_iterator i;
}
答案 1 :(得分:1)
你需要这样做:
template <class T> void print(const vector<T>& V )
{
//T is a dependant type so needs typename
typename vector<T>::const_iterator i;
}