我正在调用一个函数来深层复制双向链表。我用调试器完成了它,一切都很完美。一切顺利后会发生错误:第一个while循环称为AGAIN。我已经确定不是重复调用函数或其他任何东西的情况。我仍然是编程新手,所以我希望我只是缺少一些简单的东西。
编辑:为了清楚我的问题:在调试器中逐步运行时,执行光标从第二个while循环的开始跳转到第一个while循环的开始。 (第16行到第7行)在最后添加返回时,它从返回(第24行)跳转到第一个while循环(第7行)
void DblLinkedList::DeepCopy(DblLinkedList &source)
{
Node *tempCur = source.current; //temporary holder to reset source's current
source.current = source.first;
while(source.current != NULL) // traverse source list and copy each value into empty list
{
InsertItem(source.current->data);
source.current = source.current->succ; // iterate source list
}
source.current = source.first;
current = first;
while(source.current != tempCur) //setting the new`enter code here` list's current to the correct node
{
source.current = source.current->succ;
current = current->succ;
if(source.current == tempCur)
return; //unnecessary return that doesn't fix anything
}
return; //unnecessary return that doesn't fix anything
}
答案 0 :(得分:0)
不是100%确定这是否真的算作答案,但我发现我的功能实际上是正常的。跟随评论员'建议有帮助!
当重载的" ="调用DeepCopy时,会发生真正的错误。运营商。当重载函数return *this;
中的最后一行运行时,它再次调用DeepCopy(),这是发生错误的地方。我不确定如何避免此错误或为什么return *this
首先调用DeepCopy()
rhs和lhs表示"右/左手侧"运营商
(我在这里很新,是否最好发布关于此的第二个问题帖子?或者只是保留原样)
DblLinkedList DblLinkedList::operator=(DblLinkedList &rhs)
{
if(this != &rhs)//if they aren't the same list
{
//delete original lhs list
this->~DblLinkedList();
//make lhs a copy of rhs
DeepCopy(rhs);
}
return *this;
}