2016-04-13 21 views
0

İki kez bağlantılı liste veri yapısını uygulamaya çalışıyorum, bu özelliği kullanarak bir işlev uygulamasından bu özelliğe erişmeye çalıştığımda node türünde özel bir özelliği olan bir sınıf oluşturdum. this anahtar kelimesi uygulama başarısız. Ben Aşağıda başlık dosyasının uygulamasıdır LinkedList.hppC++: Başlık uygulama dosyasında sınıf özelliklerine erişme

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

için

Başlık dosyasını yardıma ihtiyacım var. Hata döndürdü

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

}; 

diyor ki: hata mesajı ile belirttiği gibi

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

cevap

3

this, göstericisidir.

Kullanım: böyle yaptığımda

this->node 
+0

Çalışıyor: 'nod> sonraki = & this-> düğüm;' neden çalıştığını ben –

+1

anlamıyorum nedir '& this-> node' eşdeğerdir & (bu-> node) 'ye. Bu bir işaretçidir. 'bu-> node' bir struct node'dur ve son olarak 'node 'bu' struct'un (veya buna işaret eden) bir adresidir, ihtiyacınız olan şey budur. –

+0

Ayrıca, uygulamanız bozuk. Eğer add() 'i değiştirmedikçe,' get() 'işlevini uygulayamazsınız, çünkü listenin öğesi her zaman sonuncu olacaktır. Geleneksel olarak, liste sınıfı sadece struct Node'a bir işaretçi içermeli ve listede ilk olanı olmalıdır. Ayrıca, geleneksel olarak, 'add()', listenin sonuna bir öğe ekler. –

İlgili konular