2016-04-13 11 views
0

Ich versuche, die doppelt verknüpften Datenstruktur zu implementieren, also habe ich eine Klasse erstellt, die eine private Eigenschaft node vom Typ Node hat, wenn ich versuche, auf diese Eigenschaft von einer Funktionsimplementierung zuzugreifen this Schlüsselwort die Anwendung schlägt fehl. Ich brauche für LinkedList.hppC++: Zugriff auf Klasseneigenschaften in Headerimplementierungsdatei

Header-Datei helfen

#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(); 
}; 

Unten ist die Implementierung der Header-Datei.

#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; 

}; 

Der Fehler zurückgegeben sagt:

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

Antwort

3

this ein Zeiger ist, wie sie in der Fehlermeldung hingewiesen.

Verwendung:

this->node 
+0

Es funktioniert, wenn ich dies tun: 'node-> next = & this-> Knoten;', warum es funktioniert, ist, was ich nicht verstehen –

+1

'& this-> node' entspricht zu '& (this-> node)'. 'Dies' ist ein Zeiger. 'this-> node' ist ein' struct Node' und schließlich '& this-> node' ist eine Adresse dieser' struct' (oder ein Zeiger darauf), was Sie brauchen. –

+0

Auch Ihre Implementierung ist kaputt. Wenn Sie 'add()' nicht ändern, können Sie 'get()' nicht implementieren, da das Element der Liste immer das letzte ist. Traditionell sollte die Listenklasse nur einen Zeiger auf "struct Node" enthalten und dieser sollte der erste in der Liste sein. Traditionell fügt 'add()' ein Element am Ende der Liste hinzu. –