Итак, я пытаюсь вводить и выводить файлы для сохранения обособлений Yugioh, и я получил его работу по большей части. Я использую deques для хранения объекта класса, известного как «Карта», который содержит всю информацию, и класса Deck для хранения заявок на объекты Card для каждого типа колоды, основного, бокового и дополнительного.Deque iterator не вызывает различий
Так или иначе, на проблему. Я использую локальный deque для хранения информации о ранее загруженных карточках, так как когда я загружаю каждую карту, я просматриваю deque для точных совпадений и затем сохраняю число внутри переменной для использования в выводе. Когда я пытаюсь добавить к этому локальному деку, называемому «обработанным», я получаю сообщение об ошибке.
Ошибка отладки! Выражение: Deque итератора не разыменовываемое
void Deck::SaveDeck(std::string filename)
{
std::ofstream outFile;
outFile.open(filename.c_str());
//send the file the deck name
outFile << this->deckName << "\n";
//send the deck sizes
outFile << main_deck_size << " " << side_deck_size << " " << extra_deck_size << "\n";
//iterator to iterate through the entire deck looking for copies
std::deque<Card>::iterator iter = main_deckCards.begin();
std::deque<Card>::iterator iter2 = main_deckCards.begin();
//deque to hold previously added cards
std::deque<Card> processed;
std::deque<Card>::iterator processed_iter = processed.begin();
string setNAME = "";
int setNum = 0;
int quantity = 0;
bool is_processed = false;
for (int i = 0; i < main_deck_size; i++)
{
//reset processed flag
is_processed = false;
//check processed queue for exact card
for (int j = 0; j < processed.size(); j++)
{
if (iter[i].SET_NAME == processed_iter[j].SET_NAME && iter[i].SET_NUM == processed_iter[j].SET_NUM)
{
is_processed = true;
break;
}
}
if(is_processed == false)
{
//reset variables
setNAME = "";
setNum = 0;
quantity = 0;
//draw from the next card
setNAME = iter[i].SET_NAME;
setNum = iter[i].SET_NUM;
quantity++;
//loop to look for similar cards
for (int x = i+1; x < main_deck_size; x++)
{
if (iter2[x].SET_NAME == setNAME && iter2[x].SET_NUM == setNum)
{
quantity++;
}
}
outFile << setNAME << " " << setNum << " " << quantity << "\n";
if(setNAME == "LOB-EN")
{
//removing this line causes the program to work
processed.push_back(LOB[setNum]);
}
}
}
}
Удаления строки, где я пытаюсь поместить объект в дек и программа работает без ошибок, за исключением того, что он пишет одни и те же карты несколько раз, которые я хочу обрабатывать файл с количеством для каждой карты, а не кратным, появляющимся на разных строках. Я уже проверял другие вопросы, которые возникли из-за попытки использовать std :: deque :: pop_front/back на пустом deque. Но я вообще не называю pop_front/back.
Любые идеи о том, что может вызвать ошибку?
LOB [setNum] a Тип карты? –
LOB - это массив карт, объявленных во всем мире. setNum - это элемент массива, соответствующий конкретной карте. –
Когда вы создали обработанный файл в это время обработанный deque был пуст, поэтому обработчик был установлен в null и остался нулевым даже после того, как вы поместили объекты в обработанный deque. Так что создайте обработанный_тератор, когда есть один объект в обработанном deque –