2013-09-29 108 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