Ошибка: векторный итератор не разыменовывается - PullRequest
0 голосов
/ 25 октября 2011

Я только что вставил в вектор, и все хорошо, когда я пошел вставлять дальше, с векторным итератором, в данный момент указывающим на vectorname.begin ().Поскольку у меня есть только одно значение, защитник должен остановить его от повторения, но по какой-то причине он ломается.Мне кажется, что я не получаю доступ к концу правильно или не останавливаю итерацию ... в любом случае, вот код, который нарушает.

// check if iterator X and Y are equal to destX and destY
if(iter != this->playerVector.end())
{
    while((iter->myX != destX) && (iter->myY != destY) || (iter != this->playerVector.end()))
    {
        iter++;
    }
}

он ломается при проверке операторов while после одной итерации.

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Кажется, вам не хватает правильного условия в цикле while, и поэтому оно всегда true (также ставьте скобки, когда у вас есть различные операторы). Ваше состояние должно быть,

while ((iter-> myX! = DestX) && (iter-> myY! = DestY) && (iter! = this-> playerVector.end ()))

Ниже приведена еще одна простая версия вашего цикла while:

while(iter != this->playerVector.end())
{
  if(iter->myX == destX || iter->myY == destY)
    break;
  iter++;
}
0 голосов
/ 25 октября 2011

Если то, что вы хотите сделать, это «// проверить, что итераторы X и Y равны destX и destY», то вы сделали его более сложным, чем нужно.

while(iter != this->playerVector.end())
{
  if(iter->myX == destX && iter->myY == destY) {
    cout << "found destX/Y at " << iter << endl;
    break;
  }
  iter++;
}

- редактировать -

также знает, что когда вы пишете такие логические выражения, как x || y ^ z && a & b..., вы также должны учитывать приоритет оператора , хотя в этом случае, я думаю, единственная проблема, которую они вызывают, - сделать ее нечитаемой.

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