C ++ While循环在单个函数内重复调用

时间:2015-11-09 15:43:57

标签: c++

我正在调用一个函数来深层复制双向链表。我用调试器完成了它,一切都很完美。一切顺利后会发生错误:第一个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
}

1 个答案:

答案 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;
}