2013-09-29 106 views
0
template <class Type> 
class Node 
{ 
public: 
     Node() 
     { 
     } 
     Node (Type x, Node* nd) 
     { 
      data = x; 
      next = nd; 
     } 
     Node (Type x) 
     { 
      data = x; 
      next = NULL; 

     } 
     ~Node (void) 
     { 

     } 

     Node (const Node* & nd) 
     { 
      data = nd->data; 
      next = nd->next; 
     } 

     Node & Node::operator = (const Node* & nd) 
     { 
      data = nd->data; 
      next = nd->next; 
     } 

     T data; 
     Node* next; 


}; 

難道我更換每一個節點*與轉換爲模板類(節點)

Node*<Type> 

我試圖取代它,並試圖運行像

Node* temp = myq.head; 

但它說類參數列表模板「節點」丟失。當我需要節點類本身作爲它的一部分時,我不太確定如何使用模板

+0

什麼'myq.head'?它是如何定義的? – billz

+0

my.qhead只是另一個Node對象,技術上它應該是。但現在它真的不是因爲myq.head不會被首先定義的 – user2472706

+0

我們在前幾天有一個類似的問題,請看這裏:http://stackoverflow.com/a/19034786/1529139 – 56ka

回答

0

每個節點聲明都需要一個類型<>。

對於

Node* temp = myq.head; 

要看是什麼myq.head被定義爲。如果它定義爲節點< int> *那麼temp也必須定義爲節點< int> * temp。您始終必須擁有模板對象<>。

如果你想讓Node *不知道類型,你可以使用繼承。有一個從非模板Node類繼承的模板化TypedNode類。你可以通過Node *將所有的TypeNode對象都傳遞出去,但是如果不知道它們的類型,你將無法獲取節點的值。

我不建議這樣做,但如果你真的想和混合類型的NodeLists你需要通過任何

  1. 包括在基類中定義枚舉類型跟蹤類型類型存儲在節點中,併爲每個類定義typedNode,在其構造函數中設置枚舉或從虛方法返回它。
  2. RTTI,運行時類型信息http://en.wikipedia.org/wiki/Run-time_type_information