2017-01-22 3 views
-2
void pathfind(const int* tiles, int startTile, int endTile, int height) {//const int* tiles is my map 
int currentTile = startTile; //The spawn tile 



    std::vector<int> points{ startTile }; 
    int i;//for loops 
    bool possible = true;//to make sure they 



    if (tiles[currentTile + 1] <= 2 && floor(currentTile/height) == floor(currentTile - 1/height)) {//Less than 2 because 3 and up are non-traverseable tiles. 
     for (i = 1; i <= points.size(); i++) { 

      if (points[i] == currentTile + 1) { 
       possible = false; 
      } 

     } 
     if (possible == true) { 
      points.resize(points.size() + 1); 
      points.at(points.size()) = currentTile + 1; 
      currentTile++; 
     } 
    } 
    else if (tiles[currentTile - 1] <= 2 && floor(currentTile/height) == floor(currentTile - 1/height)) { 
     for (i = 1; i <= points.size(); i++) { 

      if (points[i] == currentTile - 1) { 
       possible = false; 
      } 
      if (possible == true) { 
       points.resize(points.size() + 1); 
       points.at(points.size()) = currentTile - 1; 
       currentTile--; 
      } 
     } 

    } 
    else if (tiles[currentTile - height] <= 2) { 
     for (i = 1; i <= points.size(); i++) { 

      if (points[i] == currentTile - height) { 
       possible = false; 
      } 
      if (possible == true) { 
       points.resize(points.size() + 1); 
       points.at(points.size()) = currentTile - height; 
       currentTile--; 
      } 
     } 

    } 
    else if (tiles[currentTile + height] <= 2) { 
     for (i = 1; i <= points.size(); i++) { 

      if (points[i] == currentTile + height) { 
       possible = false; 
      } 
      if (possible == true) { 
       points.resize(points.size() + 1); 
       points[points.size()] = currentTile + height; 
       currentTile--; 
      } 
     } 

    } 

    pointList = points; 
} 

Это дает мне во время выполнения вектора ошибки подстрочный из диапазона, а затем, если я его игнорировать, то это говорит о том, что библиотеки стенда находятся вне диапазона, и оба эти находятся в строках, которые не находятся в файле.Вектор индекс вне диапазона и стандартных C++ библиотек из из диапазона C++

И до этого он дал мне ошибки об использовании

points.at[]; 

поэтому, когда я удалить те, пришли эти ошибки.

Также у меня есть sfml Если это имеет значение.

Заранее спасибо.

+0

Не уверен, если вы знаете, что индексы вектора/массива начинается с 0. Кажется, ваши индексы всегда начинаются с 1. – Shiping

+0

Как сказал @Shiping индексы начинаются от 0 до длины - 1. 'points.at (points.size())' должно быть 'points.at (points.size() - 1)' и 'i <= points.size()' должно быть 'i MRB

ответ

0

В C++ действительный массив индекс (индекс) находится в диапазоне [0, array_size-1]. Поэтому перед доступом к элементу tiles или points убедитесь, что индекс действителен.

Чтобы добавить новый элемент в конец вектора использования push_back() метод: points.push_back(currentTile - 1);

+0

, так что вы _don't_ изменяете размер? – Bonediggerninja

+0

push_back() внутренне изменяет размер на 1 и помещает значение в новое место. –

Смежные вопросы