DoubleLinkedList 删除错误

Posted

技术标签:

【中文标题】DoubleLinkedList 删除错误【英文标题】:DoublyLinkedList remove error 【发布时间】:2012-08-20 22:28:14 【问题描述】:

我正在制作一个双链表。该错误与我的 Remove 方法有关。我想不通。有人知道吗?

这是哪里出错了?

错误 1 ​​错误 C2027:使用未定义类型 'DoublyListNode' c:\users\conor\documents\college\c++\projects\repeat - 双链表\重复 - 双链表\双链表.h 230 1 重复 - 双链表

// -------------------------------------------------------------------------------------------------------
//  Name:           Remove
//  Description:    Removes the node that the iterator points to, moves iterator forward to the next node.
//  Arguments:      p_iterator: The iterator to remove
//                  isForward: Tells which direction the iterator was going through the list
//  Return Value:   None.
// -------------------------------------------------------------------------------------------------------
void Remove(DoublyListIterator<Datatype>& m_itr)

    DoublyListNode<Datatype>* node = m_head;
    // if the iteratordoesn’t belong to this list, do nothing.
    if (m_itr.m_list != this)
        return;
    // if node is invalid, do nothing.
    if (m_itr.m_node == 0)
        return;
    if (m_itr.m_node == m_head)
    
        // move the iteratorforward and delete the head.
        m_itr.Forth();
        RemoveHead();
        m_size--;
    
    else
    
        // scan forward through the list until you find
        // the node prior to the node you want to remove
        while (node->m_next != m_itr.m_node)
            node = node->m_next;
        // move the iterator forward.
        m_itr.Forth();
        // if the node you are deleting is the tail,
        // update the tail node.
        if (node->m_next == m_tail)
        
            m_tail = node;
        
        // delete the node.
        delete node->m_next;
        // re-link the list.
        node->m_next = m_itr.m_node;
        m_size--;
    

如果需要更多代码,请询问。我不想在 Stack Overflow 用户身上放很多代码。

【问题讨论】:

您看到的错误究竟是什么?例如:编译器/链接器,不需要的运行时行为(具体)?还是 SEGFAULT? 您真的希望得到任何帮助,甚至不告诉我们错误是什么吗?我们现在不需要更多代码,我们需要一个合适的标题和一个问题。 道歉。我复制并粘贴了标题。这样做时我犯了一个错误。我编辑了我的代码。请您重新考虑一下我的反对意见。 现在好多了。你可以自己解决这个问题,我敢肯定。首先查看错误所指的行。是哪一个? 它是这样的:while (node->m_next != m_itr.m_node)。它与 while 及其寻找数据类型有关? 【参考方案1】:

问题是 DoublyListNode 类的拼写错误。该类的名称为 DLNode。所以这给出了上面讨论的错误。

【讨论】:

【参考方案2】:

您正在检查尾节点,但不检查头和尾之间的节点。甚至在将节点链接到下一个成员之前,您就通过删除节点来破坏链。

让我们分析一下:-

while (node->m_next != m_itr.m_node)
            node = node->m_next;

循环后node-&gt;m_nextm_itr.m_node

    delete node->m_next;
    // re-link the list.
    node->m_next = m_itr.m_node;

您正在分配一个已删除的节点!!!!

更改代码:-

node->m_next = m_itr.m_node;
delete m_itr;

【讨论】:

这更像是一个编译错误DoublyListNode&lt;Datatype&gt;*,你需要查看你的代码。我刚刚指出了逻辑错误。

以上是关于DoubleLinkedList 删除错误的主要内容,如果未能解决你的问题,请参考以下文章

Linux删除软连接

visual C++ 6.0 问题:链接:致命错误LNK1104:无法打开文件“调试/ d.exe“ 执行link.exe时出错。

解决VS2010链接错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

tp-link无线路由器在win7系统下显示651错误 跪求错误原因及解答办法

Redis的列表(List)类型

删除所有 vim 'hi link' 定义