Я сделал двойной список в моей программе MFC. Всякий раз, когда я хочу загрузить переменные, программа вылетает из строя. Я не могу создать новый узел. Кто-нибудь знает, как сериализовать двусвязный список.MFC Сериализовать двунаправленный список
Вот моя функция:
void CDatenbankDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
Actual = Start;
while (Actual)
{
ar << Actual->name;
ar << Actual->adresse;
ar << Actual->email;
ar << Actual->fax;
ar << Actual->firma;
ar << Actual->geburtsdatum;
ar << Actual->geschlecht;
ar << Actual->land;
ar << Actual->ort;
ar << Actual->plz;
ar << Actual->telefon;
ar << Actual->vorname;
Actual = Actual->next;
}
}
else
{
Actual = Start;
while (InsertedAll != true)
{
Actual->next = new Node;
Actual->next->previous = Actual;
ar >> Actual->next->name;
ar >> Actual->next->vorname;
ar >> Actual->next->adresse;
ar >> Actual->next->email;
ar >> Actual->next->fax;
ar >> Actual->next->firma;
ar >> Actual->next->geburtsdatum;
ar >> Actual->next->geschlecht;
ar >> Actual->next->land;
ar >> Actual->next->ort;
ar >> Actual->next->plz;
ar >> Actual->next->telefon;
Actual = Actual->next;
if (!Actual->next)
{
InsertedAll = true;
}
}
}
}
Основная проблема заключается в том, что при сохранении связанного списка вы не храните ничего, что указывает, когда заканчивается список. Я не уверен, какую магию вы ожидаете, когда прочтете этот список. Как насчет сохранения * длины * списка в первую очередь. Тогда ваша процедура чтения может использовать это значение, чтобы указать, когда прекратить чтение. – john
вы уверены в 'Actual = Actual-> next;' без каких-либо проверок? – Zigma
Лучший способ узнать, когда заканчивается список, - сначала пройти по списку и получить количество участников. Напишите это сначала в поток. Это способ, как и все другие контейнеры MFC, использовать поток архива. – xMRi