下面是我编写的用于在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;
};
答案 0 :(得分:1)
您的比较(obj <= head->data)
和((pNode->next)->data <= obj)
显然位于ItemType *
指针之间。如果要比较它们指向的ItemType
个对象,则需要取消引用指针。例如,测试(*obj <= *head->data)
。