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 *Node*<Type>
我尝试更换它并尝试运行类似
的内容Node* temp = myq.head;
但它表示缺少类模板“Node”的参数列表。当我需要Node类本身作为它的一部分时,我不确定如何使用模板
答案 0 :(得分:0)
Node的每个声明都需要&lt;&gt;。
中的类型对于
Node* temp = myq.head;
取决于myq.head的定义。如果它被定义为Node&lt; int&gt; *那么temp也必须被定义为Node&lt; int&gt; * temp。你总是必须拥有&lt;&gt;与模板对象。
如果您想在不知道类型的情况下拥有Node *,则可以使用继承。有一个模板化的TypedNode类,它继承自非模板的Node类。您将能够传递所有这些TypeNode&lt;&gt; Node *周围的对象,但是如果不知道它们的类型,你将无法获得节点的值。
我不建议这样做,但如果真的希望制作具有混合类型的节点列表,则需要通过
跟踪类型