为什么我的矢量迭代器不兼容?

时间:2010-10-16 02:15:27

标签: c++ vector

我正在执行以下操作并收到调试错误:

AguiWidgetBase* AguiWidgetContainer::recursiveGetWidgetUnderMouse(
    AguiWidgetBase* root, const AguiMouseEventArgs &mouse)
{

    AguiWidgetBase* currentNode = root;
    bool foundsomething = true;

    while(foundsomething)
    {
        foundsomething = false;
        if(currentNode->getChildCntrolCount() > 0)
            for (std::vector<AguiWidgetBase*>::const_reverse_iterator rit =
                    currentNode->getChildRBeginIterator();
                rit < currentNode->getChildREndIterator(); ++rit) 
            { 
                if(!foundsomething)
                    if ((*rit)->intersectionWithPoint(mouse.getPosition())) 
                    { 
                        foundsomething = true;
                        currentNode = *rit;
                    } 

                } 
            }
            return currentNode;
        }

    // ...

当currentNode成为指向root子节点的指针并在for上崩溃后失败。

我做错了什么?

由于

1 个答案:

答案 0 :(得分:1)

您正在重新分配迭代器正在检查的结束位置。

2条评论:

  1. 将括号放在if语句周围。你被允许不这样做但是如果你这样做会使代码更具可读性并提醒你缩进。

  2. 向内部if添加break语句,这样您就不需要继续遍历向量。如果没有额外的变量和变量检查,这将完全符合您的要求。