Соответствующий код выглядит следующим образом:
Я проверил каждое назначение объекта медсестры и все это отдельно и данные хранятся правильно, я просто не могу получить к ним доступ, чтобы определить, какие плитки по какой-то причине отображать. Я также попытался получить доступ к данным без итератора, и это тоже не сработало. Любые идеи очень ценятся, я пытался понять это часами: /
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, но это не сработало или. Спасибо за помощь ребята 🙂
Вы никогда не проверяете свой итератор, чтобы увидеть != roster.end()
, Если это так, это приведет к неопределенному поведению, когда вы попытаетесь разыменовать или увеличивать его.
Также обратите внимание, что ваш код, скорее всего, протекает. Ты никогда delete text;
,
если вы знаете размер этого
vector.size()
Вы можете получить доступ к каждому элементу
vector.at(x);
Если Entity Manager дает вам копию данных, то это должно быть в порядке (я предполагаю, что это не указатель)
Возможно, вам придется объяснить, почему у вас такая загадочная петля, что нет смысла в том, что ваш первый цикл начинается с 42 в индексной переменной, я думаю, что вы делаете две вещи за один шаг, и это усложняет вашу жизнь.
Как вы, возможно, знаете, вы должны указать строку, на которой он падает.
Если вы сначала выберите данные и после их отображения вы, вероятно, обнаружите ошибку самостоятельно.
Изменить: я понял, что вы, кажется, не понимают, что вы делаете, не просто взломать ваш код, визуализировать вашу проблему. Кроме того, ваша логика мне не ясна, когда у вас есть вектор с 10 элементами, зачем вам пытаться получить доступ к элементу -1, если элемент 0 не выведет значение, которое вы хотите увидеть? Вы должны попробовать это наоборот, проверить, почему значение в 0 не содержит то, что вы хотите. Я также предполагаю, что вы не написали исходный код, попробуйте сначала понять код. Возьмите немного бумаги и нарисуйте текущий рабочий процесс и целевой рабочий процесс, который вы пытаетесь создать.