2012-08-23 2 views
0

Итак, у меня есть класс LinkedList с вложенным классом LinkedListIterator. В методах LinkedListIterator я ссылаюсь на частные поля LinkedList. Который я считал законным. Но я получаю ошибку:C++ - Использование элементов класса из вложенного класса?

from this location 

каждый раз, когда я обращаюсь к ним.

И я получаю соответствующие сообщения об ошибках на полях в классе ограждающей:

invalid use of non-static data member 'LinkedList<int>::tail' 

Любая идея, почему? Соответствующий код приведен ниже:

template<class T> 
class LinkedList { 

    private: 
     //Data Fields-----------------// 
     /* 
     * The head of the list, sentinel node, empty. 
     */ 
     Node<T>* head; 
     /* 
     * The tail end of the list, sentinel node, empty. 
     */ 
     Node<T>* tail; 
     /* 
     * Number of elements in the LinkedList. 
     */ 
     int size; 

    class LinkedListIterator: public Iterator<T> { 

      bool add(T element) { 

       //If the iterator is not pointing at the tail node. 
       if(current != tail) { 

        Node<T>* newNode = new Node<T>(element); 
        current->join(newNode->join(current->split())); 

        //Move current to the newly inserted node so that 
         //on the next call to next() the node after the 
         //newly inserted one becomes the current target of 
         //the iterator. 
        current = current->next; 

        size++; 

        return true; 
       } 

       return false; 
      } 
+1

При задании вопросов, связанных с ошибками компиляции или компоновщика, он помогает размещать _all_ сообщений об ошибках как можно полнее. То есть просто скопируйте их в стенографию в вопрос. –

+0

См. Здесь http://stackoverflow.com/questions/486099/can-inner-classes-access-private-variables – jogojapan

+0

@jogojapan совершенно другой вопрос, но ответ показывает, что внутренний класс имеет ссылку на экземпляр внешнего класса, что является способом решения этой проблемы. –

ответ

2

Вы не можете просто использовать не- static членов, как это. Я думаю, что следующий пример очистит вещи:

LinkedList<int>::LinkedListIterator it; 
it.add(1); 

Что бы current и tail быть внутри метода? Нет никакого примера LinkedList, о котором можно говорить, поэтому эти члены еще не существуют.

Я не говорю, чтобы сделать членов static, это было бы неправильно, но переосмыслить свой подход.

Посмотрите, как итераторы std.

+0

ах Я только что понял, что мне нужно сделать ... спасибо! – Ethan

+1

Ну, если этот ответ правильный, вы должны его принять. –

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