Я работал над базовым c проектом по разработке игры и получил исключение std :: out_of_range в части кода ниже. Я знаю, почему и когда возникает исключение out_of_range, но не может его исправить.
Функция, которая генерирует исключение:
void Texture_Load(std::vector<sf::Texture> &Target, std::vector<std::string> Locations) {
size_t Size = Locations.size();
for (size_t i = 0; i <= (Size - 1); i++) {
sf::Texture TMP_Image;
TMP_Image.loadFromFile(Locations[i]);
Target.push_back(TMP_Image);
}
}
Вызов функции:
Texture_Load(Menu_Obj.PNG_Files.at(0), Menu_Obj.PNG_Locations);
Где Векторы PNG_Files и PNG_Locations определены:
std::vector<std::vector<sf::Texture> > PNG_Files; // PNG Files are stored in drawing order
std::vector<std::string> PNG_Locations; //Holds the location of PNG Files as Strings
Как вы можете понять, Menu_Obj - это объект ...
В коде эти две переменные изначально не определены.
После получения исключений я попробовал несколько вещей, таких как:
- Резервирование памяти для вектора "PNG_Files", но без присвоения какого-либо значения
Menu_Obj.PNG_Files.reserve(15);
for (auto elem : Menu_Obj.PNG_Files) {
elem.reserve(15);
}
- А затем попытался как выделить, так и сохранить в нем одну немую переменную
Menu_Obj.PNG_Files.reserve(15);
for (auto elem : Menu_Obj.PNG_Files) {
sf::Texture A;
elem.push_back(A);
}
But yet, couldn't find it. I know I can do something that discard exceptions but may cause problems later.
.. I'll be very grateful for any help or suggestion. Have a nice day !
Решение:
После изменения «резерва» функции с "std :: vector :: resize ()" проблема решена.
Menu_Obj.PNG_Files.resize(1);
Добавление одного элемента позволило мне использовать эту векторную ячейку в качестве параметра