Ошибка C ++ при доступе к вектору & lt; string & gt; элементы через итератор

Соответствующий код выглядит следующим образом:

Я проверил каждое назначение объекта медсестры и все это отдельно и данные хранятся правильно, я просто не могу получить к ним доступ, чтобы определить, какие плитки по какой-то причине отображать. Я также попытался получить доступ к данным без итератора, и это тоже не сработало. Любые идеи очень ценятся, я пытался понять это часами: /

for(unsigned int j = 42; j < EntityManager::getInstance()->nurses.size() * 42 + 42; j += 42) //increment y axis
{
int rosterCounter = 0;
int count = 0;
vector<string> roster = EntityManager::getInstance()->nurses[count]->getRosterData();
vector<string>::const_iterator iter;

iter = roster.begin();

for(unsigned int i = GraphicsCore::getInstance()->screenWidth; rosterCounter <= EntityManager::getInstance()->getSize() && iter != roster.end(); i -= 64) //iterate through each column, RTL
{

TextBox * text;

if(*iter == "D")
{
text = new TextBox("resources/tiles/textboxshortd.png", i, j, (TextBox::type) 4);
}
else if(*iter == "N")
{
text = new TextBox("resources/tiles/textboxshortn.png", i, j, (TextBox::type) 4);
}
else if(*iter == "O")
{
text = new TextBox("resources/tiles/textboxshorto.png", i, j, (TextBox::type) 4);
}
else
{
text = new TextBox("resources/tiles/textboxshort.png", i, j, (TextBox::type) 4);
}
iter++;
rosterCounter++;
}
count++;
}

Редактировать: теперь он работает, но первая итерация, похоже, ничего не делает, плитки по какой-то причине вообще не помещаются в первый столбец, и кажется, что он полностью смещен на 1. Я попробовал begin () — 1, но это не сработало или. Спасибо за помощь ребята 🙂

-1

Решение

Вы никогда не проверяете свой итератор, чтобы увидеть != roster.end(), Если это так, это приведет к неопределенному поведению, когда вы попытаетесь разыменовать или увеличивать его.

Также обратите внимание, что ваш код, скорее всего, протекает. Ты никогда delete text;,

3

Другие решения

если вы знаете размер этого

vector.size()

Вы можете получить доступ к каждому элементу

vector.at(x);

Если Entity Manager дает вам копию данных, то это должно быть в порядке (я предполагаю, что это не указатель)

Возможно, вам придется объяснить, почему у вас такая загадочная петля, что нет смысла в том, что ваш первый цикл начинается с 42 в индексной переменной, я думаю, что вы делаете две вещи за один шаг, и это усложняет вашу жизнь.

Как вы, возможно, знаете, вы должны указать строку, на которой он падает.

Если вы сначала выберите данные и после их отображения вы, вероятно, обнаружите ошибку самостоятельно.

Изменить: я понял, что вы, кажется, не понимают, что вы делаете, не просто взломать ваш код, визуализировать вашу проблему. Кроме того, ваша логика мне не ясна, когда у вас есть вектор с 10 элементами, зачем вам пытаться получить доступ к элементу -1, если элемент 0 не выведет значение, которое вы хотите увидеть? Вы должны попробовать это наоборот, проверить, почему значение в 0 не содержит то, что вы хотите. Я также предполагаю, что вы не написали исходный код, попробуйте сначала понять код. Возьмите немного бумаги и нарисуйте текущий рабочий процесс и целевой рабочий процесс, который вы пытаетесь создать.

0

По вопросам рекламы [email protected]