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

How to implement template inner class function (C++)

本文关键字:内部 类函数 c++ 实现 何实现      更新时间:2023-10-16

考虑下面的例子:

template <typename T>
class Vector {
    T* data;
public:
    class Iterator {
        T* i;
    public:
        Iterator& operator++();
    };
};

如果我想实现'operator++'函数,我这样写是有意义的:

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'

为什么会发生?我该怎么解决这个问题呢?

非常感谢。

编译器不知道Vector的成员Iterator一定是一个类型,所以你需要用typename关键字来告诉它:

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

有关typename的详细信息,请参阅此问题