如何实现模板内部类函数(C ++)

时间:2015-06-10 09:16:28

标签: c++ class templates

考虑以下示例:

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'

为什么会这样?我该怎么做才能解决这个问题?

非常感谢。

1 个答案:

答案 0 :(得分:1)

编译器不知道Iterator的成员Vector必定是一种类型,因此您需要使用typename关键字告诉它:

template <typename T>
typename Vector<T>::Iterator& Vector<T>::Iterator::operator++() {
//here^
    i++;
    return *this;
}

有关typename的详细信息,请参阅this question