2014-10-29 103 views
0

以下是我编写的用于生成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

当你用调试器一行一行地逐行执行代码时,你看到了什么? – 2014-10-29 08:25:46

+0

直到插入1和-1为止它一直很好。但是当它到了13的插入位置时,它只是进入了数据的情况。该值显示为-1和13,但是......因此在-1之前插入13。 – 2014-10-29 08:27:40

+0

我们可以看到Node的定义吗? – Darinth 2014-10-29 08:29:36

回答

1

你比较(obj <= head->data)((pNode->next)->data <= obj)显然ItemType *指针之间。如果你想在他们指向的ItemType对象之间进行比较,你需要取消引用指针。例如,测试(*obj <= *head->data)

+0

This worked !,所以当比较一个指针时,两个值都需要指针值..? – 2014-10-29 08:32:41

+0

对不起,我不明白这个问题,请您详细说明一下吗? – 2014-10-29 08:33:26

+0

所以,当我把obj作为参数时,它被接受为* obj,指针,并且pNode也被声明为一个指针,然后当我试图在以后使用它们时,是否需要(obj <= head->数据)与(* obj <= *head->数据)相同 – 2014-10-29 08:36:17