вложенные классы в C ++ не работают

0

Я пытаюсь создать список. Моя проблема возникает, когда я пытаюсь добраться до поля "узел" внутри класса "Итератор".

#include <iostream>
using namespace std;

template<typename T>
class List{

  class Node;
  Node* head;
  Node* first;
  int size;

public:
   class Iterator;
   List(): head(new Node), first(new Node), size(0){};
   void insertFirst(T& element);
   void insertFirst(T element);
   int getSize();
   Iterator& begin();
};

template<class T>
class Iterator{
   friend class List<T>;
   typename List<T>::Node* node;
   List<T>* list;

 public:
   Iterator(List<T> src):node(NULL), list(&src){}
 };

 template<class T>
 typename List<T>::Iterator& List<T>::begin(){
     Iterator it(*this);
     it.node=first; <--- ***right here***
     return it;
 }

Я получаю "Узел" Поле "не может быть разрешен".

Я не знаю, что случилось с моим кодом.

Я буду очень благодарен, если кто-нибудь сможет помочь.

  • 0
    Попробуйте определить его как class List<T>::Iterator { … }; ,
  • 0
    В строке перед отмеченной вами попытайтесь указать параметр шаблона для Iterator: Iterator<T> it(*this);
Теги:
class
list
templates

1 ответ

0

Тип typename List<T>::Iterator объявлен, но не определен. Вы определили совершенно отдельный тип с несколько похожим именем. Вы, вероятно, хотели написать

template <typename T>
class List<T>::Iterator {
    // ...
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню