2014-10-29 181 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