变量没有被正确比较 是我编写的类,用于在C++中生成排序链表 完全相同的代码在不是模板时工作。 然而,一旦我建立了模板,代码似乎无法正确地比较变量

变量没有被正确比较 是我编写的类,用于在C++中生成排序链表 完全相同的代码在不是模板时工作。 然而,一旦我建立了模板,代码似乎无法正确地比较变量,c++,if-statement,linked-list,insertion-sort,C++,If Statement,Linked List,Insertion Sort,比如说,, 当我插入1,-1,13时 列表应按递增顺序显示-1 13。 然而,最终的名单是13比1 在调试过程中,它甚至没有经历最后一个案例。 当它进入第二个案例时,表示13小于-1 发生了什么事 template <class ItemType> bool List342<ItemType>::Insert(ItemType *obj) { Node *insNode = new Node; insNode->data = obj; if (head == NU

比如说,, 当我插入1,-1,13时 列表应按递增顺序显示-1 13。 然而,最终的名单是13比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;
}

您的比较
(obj数据)
((pNode->next)->数据当你用调试器逐行检查你的代码时,你看到了什么?在插入1和-1之前,它一直都很好。但是当插入13时,它只是进入了obj数据的情况。虽然值显示为-1和13…因此在-1之前插入13。我们能看到节点的定义吗?实际上…function正在接收“ItemType*obj”作为参数。它正在接收指向ItemType的指针,而不是ItemType。因此,“obj数据”比较的是内存位置,而不是它们包含的值。我明白了……谢谢。我仍在努力解决指针的概念……:(…这很有效!所以当与指针进行比较时,两个值都必须是指针值….?对不起,我不明白这个问题。请您详细说明一下好吗?所以,当我将obj作为参数时,它被接受为*obj,pointer。pNode也被声明为指针。那么,当我以后尝试使用它们时,是否需要指定它们是指针再次说明?不应该(obj数据)与(*obj数据)相同吗这并不完全正确。一旦名称
obj
被声明为类型为
ItemType*
的变量,以后每次使用
obj
都会引用该指针变量。另一方面,
*obj
引用
obj
指向的对象。星号
*
是解引用运算符;它是不只是重新表示<代码> Obj/Cuth>是指针。(如果你试图与Perl语言中使用类型化的SIGLS进行比较,在C++中,没有SIGILS。),“代码> OBJ <代码>可能等于一个地址,如0x5F790EA2,而<代码> *Obj> <代码>可能等于13OHHHHHOK,这是有意义的。谢谢!
struct Node {
    ItemType *data;
    Node *next;
};