2016-04-13 4 views
0

Я пытаюсь реализовать структуру данных с двойным привязкой, поэтому я создал класс, который имеет приватное свойство node типа Node, когда я пытаюсь получить доступ к этому свойству из реализации функции, используя this ключевое слово приложение не работает. Мне нужна помощьC++: доступ к свойствам класса в файле реализации заголовка

Заголовочный файл для LinkedList.hpp

#include <stdio.h> 
template<class T> 
class LinkedList{ 
    private : 
    struct Node{ 
     T value; 
     Node* next; 
     Node* prev; 
    }node; 
    public : 
     LinkedList(); 
     LinkedList(T item); 
     void add(T item); 
//  void get(); 
//  void insert(); 
//  void remove(); 
}; 

Ниже реализация заголовочного файла.

#include "LinkedList.hpp" 

template<class T> 
LinkedList<T>::LinkedList(){ 

} 


template<class T> 
LinkedList<T>::LinkedList(T item){ 

} 

template <class T> 
void LinkedList<T>::add(T item){ 
    Node* node = new Node; 
    node->value = item; 
    node->prev = NULL; 

    //Where the error is being generated 
    node->next = this.node; 

}; 

Обнаружена ошибка говорит:

/Users/mac/Documents/LinkedList/LinkedList/LinkedList.cpp:27:22: Member reference base type 'LinkedList<T> *' is not a structure or union 

ответ

3

this является указателем, как было указано в сообщении об ошибке.

Использование:

this->node 
+0

Это работает, когда я делаю это: 'node-> следующая = & this-> узел;', почему это работает, что я не понимаю, –

+1

'& this-> node' эквивалентно на '& (this-> node)'. 'this' является указателем. 'this-> node' является' struct Node', и, наконец, '& this-> node' является адресом этой' struct' (или указателем на него), что вам и нужно. –

+0

Также ваша реализация нарушена. Если вы не измените 'add()', вы не сможете реализовать 'get()', поскольку элемент списка всегда будет последним. Традиционно класс списка должен содержать только указатель на «struct Node», который должен быть первым в списке. Также традиционно 'add()' добавляет элемент в конец списка. –