2016-03-08 16 views
2

我試圖模板化一些類(一個LinkedListNode和LinkedList),這樣製作模板類後不是類,名稱空間或枚舉嗎?

template <class T> 
class LinkedListNode{ 
    public: 
     T data; 
     LinkedListNode *next; 
     LinkedListNode(); 
}; 

在我LinkedList類,我有私有變量:

private: 
    LinkedListNode *head; 
    //iterator for traversing the list 
    LinkedListNode *current; 

};

編譯時,我得到奇怪的錯誤:

./LinkedList.h:38:3: error: unknown type name 'LinkedListNode'; did you mean 'LinkedList'? LinkedListNode *head; ^~~~~~~~~~~~~~ LinkedList ./LinkedList.h:13:7: note: 'LinkedList' declared here class LinkedList{ ^ ./LinkedList.h:40:3: error: unknown type name 'LinkedListNode'; did you mean 'LinkedList'? LinkedListNode *current; ^~~~~~~~~~~~~~ LinkedList ./LinkedList.h:13:7: note: 'LinkedList' declared here class LinkedList{ ^ LinkedList.cpp:7:1: error: 'LinkedListNode' is not a class, namespace, or enumeration LinkedListNode::LinkedListNode(){ ^ ./LinkedList.h:5:7: note: 'LinkedListNode' declared here class LinkedListNode{ ^

爲什麼會出現這些錯誤,如果它說我的一個LinkedListNode也正在申報?

回答

2

基本上,編譯器是說,你沒有的類型LinkedListNode和編譯器是正確的 - LinkedListNode是一個模板,而不是一個類型。要形成一個類型,你需要用參數實例化模板。例如,LinkedListNode<int>是一種類型。

但是,您的編譯器可以提供更好的診斷。例如,g ++會:

4 : error: missing template arguments before 'x'

相關問題