Я пытаюсь объявить класс итератора в классе массива, а затем реализовать его вне класса массива. Тем не менее, я столкнулся с синтаксической ошибкой. Я не уверен, почему это не работает. Я только смог сделать вывод, что проблема связана с моей попыткой реализовать итератор массива. Я обозначил строку данной ошибки ниже. Спросите, нужен ли вам какой-либо другой код или какое-то объяснение, я удалил много кода, чтобы не публиковать сообщения.
РЕДАКТИРОВАТЬ: я заменил неправильный заголовок на правильный заголовок. Я получил разные ошибки, которые я исправил, поместив ключевое слово typename. Можно ли кому-то объяснить, почему ключевое слово typename было моей реализацией классов итераторов? Ошибка, которую я получил без нее, была
std_bidirectional_iterator: ds :: Array :: iterator не является допустимым аргументом шаблона для производного параметра.
Array.h
#include "Common.h"
#include "ArrayInterface.h"
#include "std_bidirectional_iterator.h"
template<class T, size_t N>
class ds::ArrayTwo : public ArrayInterface<T>
{
class iterator; // Tried with all following implementations
template<class T> class reverse_iterator;
template<class U> class const_iterator;
template<class T> class const_reverse_iterator;
};
template<class T, size_t N>
// Error on line below[fixed by typename]
class ds::ArrayTwo<T, N>::iterator : public std_bidirectional_iterator<typename ds::ArrayTwo<T, N>::iterator, T>
{
};
std_bidirectional_iterator.h
#include <iterator>
template<class Derived, class Type>
class std_bidirectional_iterator : public std::iterator<std::bidirectional_iterator_tag, Type>
{
virtual Derived & operator=(const Derived & it) = 0; // Copy Assignment Operator
virtual reference operator*(void) = 0; // De-Reference Operator (Returns reference)
virtual pointer operator->(void) = 0; // De-Reference Operator (Returns pointer)
virtual Derived & operator++(void) = 0; // Pre-Fix ++
virtual Derived operator++(int) = 0; // Post-Fix ++
virtual Derived & operator--(void) = 0; // Pre-Fix --
virtual Derived operator--(int) = 0; // Post-Fix --
virtual bool operator==(const Derived & it) const = 0; // Equal To Operator
virtual bool operator!=(const Derived & it) const = 0; // Not Equal To Operator
};