考虑以下示例:
template <typename T>
class Vector {
T* data;
public:
class Iterator {
T* i;
public:
Iterator& operator++();
};
};
如果我想实现&#39;运算符++&#39;功能,它让我这样写:
template <typename T>
Vector<T>::Iterator& Vector<T>::Iterator::operator++() {
i++;
return *this;
}
但是我得到了这些错误行:
error C2143: syntax error : missing ';' before '&'
error C2065: 'T' : undeclared identifier
error C2923: 'Vector' : 'T' is not a valid template type argument for parameter 'T'
为什么会这样?我该怎么做才能解决这个问题?
非常感谢。
答案 0 :(得分:1)
编译器不知道Iterator
的成员Vector
必定是一种类型,因此您需要使用typename
关键字告诉它:
template <typename T>
typename Vector<T>::Iterator& Vector<T>::Iterator::operator++() {
//here^
i++;
return *this;
}
有关typename
的详细信息,请参阅this question。