Почему я получаю несовместимые векторные итераторы? - PullRequest
0 голосов
/ 16 октября 2010

Я делаю следующее и получаю эту ошибку отладки:

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 Ответ

1 голос
/ 16 октября 2010

Вы переназначаете конечную позицию, которая проверяется вашим итератором.

2 комментария:

  1. Поставьте квадратные скобки вокруг ваших операторов if.Вам разрешено не делать этого, но это делает код более читабельным, если вы делаете, и напоминает о необходимости сделать отступ.

  2. добавьте оператор break во внутренний if, чтобы вы не делалиНе нужно продолжать обходить вектор.Это выполнит именно то, что вы хотите, без дополнительной переменной и проверки переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...