【发布时间】:2014-10-29 08:21:40
【问题描述】:
下面是我编写的用于在 C++ 中生成排序链表的类 当它不是模板时,完全相同的代码可以工作。 但是,一旦我进行了模板化,代码似乎无法正确比较变量。
例如, 当我插入 1, -1, 13 该列表应按升序排列 -1 1 13。 然而,最终的名单是 13 -1 1。
在调试过程中,它甚至没有通过最后一种情况。 它进入第二种情况时,说13小于-1。
发生了什么事...?
template <class ItemType>
bool List342<ItemType>::Insert(ItemType *obj)
{
Node *insNode = new Node;
insNode->data = obj;
if (head == NULL)
{
head = insNode;
return true;
}
if (obj <= head->data)
{
insNode->next = head;
head = insNode;
return true;
}
Node *pNode = head;
while ((pNode->next != NULL) && ((pNode->next)->data <= obj))
{
pNode = pNode->next;
}
insNode->next = pNode->next;
pNode->next = insNode;
return true;
}
这是节点定义
struct Node {
ItemType *data;
Node *next;
};
【问题讨论】:
-
在使用调试器逐行执行代码时,您看到了什么?
-
在插入 1 和 -1 之前它表现良好。但是当它插入 13 时,它只是进入了 obj data 的情况。该值显示为 -1 和 13 ......因此在 -1 之前插入 13。
-
可以看看Node的定义吗?
-
实际上......该函数正在接收“ItemType *obj”作为它的参数。它接收指向 ItemType 的指针,而不是 ItemType。因此“obj data”比较的是内存位置,而不是它们包含的值。
-
我明白了...谢谢。我还在为指针的概念苦苦挣扎... :(...
标签: c++ if-statement linked-list insertion-sort