C++ 双链接列表删除错误

C++ 双链接列表删除错误,c++,doubly-linked-list,C++,Doubly Linked List,我正在制作一个双链接列表。错误与我的Remove方法有关。我想不出来。有人知道吗 这就是错误所在 错误1错误C2027:使用未定义的类型 “DoublyListNode”c:\users\conor\documents\college\c++\projects\repeat -双链接列表\重复-双链接列表\双链接列表.h 230 1重复-双链接列表 //------------------------------------------------------------------------

我正在制作一个双链接列表。错误与我的Remove方法有关。我想不出来。有人知道吗

这就是错误所在

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

//-------------------------------------------------------------------------------------------------------
//名称:删除
//描述:删除迭代器指向的节点,将迭代器向前移动到下一个节点。
//参数:p_迭代器:要删除的迭代器
//isForward:告诉迭代器遍历列表的方向
//返回值:无。
// -------------------------------------------------------------------------------------------------------
空隙清除(双针头和m_itr)
{
DoublyListNode*node=m_头;
//如果迭代器不属于此列表,请不要执行任何操作。
如果(m_itr.m_list!=此)
返回;
//如果节点无效,则不执行任何操作。
if(m_itr.m_节点==0)
返回;
if(m_itr.m_node==m_head)
{
//向前移动迭代器并删除头部。
m_itr.Forth();
移除头部();
m_尺寸--;
}
其他的
{
//向前浏览列表,直到找到
//要删除的节点之前的节点
while(node->m_next!=m_itr.m_node)
node=node->m_next;
//向前移动迭代器。
m_itr.Forth();
//如果要删除的节点是尾部,
//更新尾部节点。
if(node->m_next==m_tail)
{
m_tail=节点;
}
//删除节点。
删除节点->m_next;
//重新链接列表。
node->m_next=m_itr.m_node;
m_尺寸--;
}
}

如果需要更多的代码,请询问。我不想在堆栈溢出用户身上放太多代码。

您正在检查尾部节点,但没有检查头部和尾部之间的节点。您甚至在将节点链接到下一个成员之前就删除了该节点,从而破坏了链

让我们分析一下:-

while (node->m_next != m_itr.m_node)
            node = node->m_next;
循环
node->m_next
m_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;

问题是类doublyistnode的输入错误。类名为DLNode。这就是上面讨论的错误。

您看到的错误到底是什么?例如:编译器/链接器,不希望的运行时行为(是否特定)?或者SEGFAULT?你真的希望在不告诉我们错误是什么的情况下得到任何帮助吗?我们现在不需要更多的代码,我们需要一个合适的标题和一个问题。我复制并粘贴了标题。我做这件事时犯了一个错误。我编辑了我的代码。你能重新考虑一下我的反对票吗?现在好多了。我相信你自己也能弄明白的。首先查看错误所指的行。它是哪一个?它是这样的:while(node->m\u next!=m\u itr.m\u node)。这与while和查找数据类型有关?这更多的是一个编译错误
doublyistnode*
,您需要查看代码。我刚刚指出了逻辑错误。
node->m_next = m_itr.m_node;
delete m_itr;