2017-03-18 84 views
0

我想實現一個單獨的鏈表。我得到'節點'沒有在第8行和第15行命名類型。同樣在第33和34行,我得到第一個和最後一個沒有在此範圍內聲明。這可能是Node未被識別的結果。'節點'沒有命名一個類型鏈接列表

#include <iostream> 

template <typename T> 
class Linked_List { 
public: 
    Linked_List(); 
    void print_list(); 
    Node* find_kth(int k); // Line 8 
    void insert_front(T d); 
    void insert_back(T d); 
    void delete_front(); 
    void delete_back(); 
private: 
    int length; 
    Node* first, last; // Line 15 
    class Node { 
    public: 
    Node(Node* n = NULL, T d = T{}); 
    private: 
    Node* next; 
    int data; 
    }; 
}; 

template <typename T> 
typename Linked_List<T>::Node(Node* n, T d) { 
    next = n; 
    data = d; 
} 

template <typename T> 
Linked_List<T>::Linked_List() { 
    first = NULL; // Line 33 
    last = NULL; // Line 34 
    length = 0; 
} 

template <typename T> 
void Linked_List<T>::print_list() { 
    Node* temp = first; 
    if (length > 0) { 
    std::cout << first->data << std::endl; 
    } 
    for (int i = 1; i < length; ++i) { 
    temp = temp->next; 
    std::cout << temp->data << std::endl; 
    } 
} 

template <typename T> 
void Linked_List<T>::insert_front(T d) { 
    Node* new_node = new Node{first, d}; 
    Node* temp = new_node; 
    first = temp; 
} 


int main() { 
    Linked_List<int> l_l; 
    //l_l.insert_front(10); 
    // l_l.print_list(); 

    return 0; 
} 
+0

嘗試在類中使用它之前聲明節點類 –

回答

1

最後兩個錯誤是他前兩個的結果,一旦你解決它們就會消失。前兩個錯誤是因爲你在聲明它之前引用了符號Node

此外,您實施Node構造函數的方式不正確。

class Linked_List { 
    class Node {    // <-- move it here 
    public: 
    Node(Node* n = NULL, T d = T{}); 
    private: 
    Node* next; 
    int data; 
    }; 
public: 
    Linked_List(); 
    void print_list(); 
    Node* find_kth(int k); 
    void insert_front(T d); 
    void insert_back(T d); 
    void delete_front(); 
    void delete_back(); 
private: 
    int length; 
    Node* first, last; 
}; 

Node你正試圖實現類的身體外部的構造應該是這樣的:

template <typename T> 
Linked_List<T>::Node::Node(Node* n, T d) { 
    next = n; 
    data = d; 
} 

正如你在這裏看到的Linked_List<T>::Node是類的名稱,那麼第二Node是構造函數的名稱,內部Node是參數的類型,但在後者中,我們不需要再次說明Linked_List<T>::Node,因爲名稱的範圍已經確定。

+0

我認爲順序在類定義中並不重要。但看起來你是正確的,它解決了我的問題。 – user1692570

+1

@ user1692570的確,你所說的關於成員變量和方法是真實的,而不是關於嵌套類:) –

相關問題