2015-06-10 3 views
1

рассматривая пример ниже:Как реализовать шаблон внутреннего класса функцию (C++)

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

, если я хочу реализовать "оператор ++ функция, она делает Sence I'ld написать так:

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

'шаблон имяТипа Вектор :: итератор & Vector :: итератор :: оператор ++() {' –

ответ

1

компилятор не знает, что член Iterator из Vector обязательно типа, так что вы должны сказать ему с typename ключевым словом:

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

См this question для получения более подробной информации о typename.

+0

Ahhaha, «умная мысль идет в голову в то же время» я даже связан один и тот же вопрос * (ответ, хоть)*. Хорошо, удаляю. –

+0

Спасибо вам много! Я посмотрю. –

+1

или 'auto Vector :: Итератор :: operator ++() -> Итератор &' в C++ 11 –

Смежные вопросы