2012-03-24 3 views
0
void writeFile(){ 
    Employer *temp = head; 
    while (temp != NULL) 
    { 
     temp->tryWrite();//Employee's display method called here 
     temp = temp->getNext(); 
    } 
} 

void main(){ 
    EmployerList em; 
    em.AddNode("[email protected]", "LIME", "Manager", "ming", "ding", "Newston", "43", "873"); 
    em.AddNode("[email protected]", "NOKIA", "CEO", "rew", "nbv", "Europe", "0411-789-6548", "985-257-1111"); 
    //em.writeFile(); 
} 

Я пытаюсь написать связанный список в файл как объект, а не сингулярно, как у меня в функции tryWrite. любая помощь?Как связать связанный объект списка с файлом

+0

Я знаю, что это выглядит сложным, но я пытаюсь записать связанный список в основном в файл как объект, а не в качестве единственного, как у меня в функции tryWrite. любая помощь? –

+4

Должен ли быть вопрос где-то там? Кроме того, отпечаток всего вашего кода четыре пробела, чтобы он отображался аккуратно. –

+0

прочитайте мой комментарий к вопросу, пожалуйста @BenVoigt –

ответ

0

Код, который вы показываете, является неполным и не компилируется. Вам не хватает деклараций для переменных-членов класса. Ваш конструктор для EmployerList должен, вероятно, брать const Employer & и хранить его; он не должен иметь дело со всеми переменными, используемыми для инициализации Работодателя.

Написание связанного списка в файл скромно сложно. Вы не можете целенаправленно писать указатели; вам необходимо записать значения данных для каждого элемента в стандартизованном, легко читаемом формате. Вы используете близость в файле, чтобы указать отношения «next» (и «prev»). Этот процесс называется «сериализация» на выходе и «десериализация» на входе.


Эта идиома:

Employer *node = new Employer(Email, cName, pos, fName, lName, addr, tHome, tMobile); 

    //if memory was sucessfully allocated 
    if (node != NULL) 

архаичен (до стандарта, то есть до 1998 г. стандарт) C++. Вы не вызывали распределитель «без выброса»; если выделение не удалось, было выбрано исключение. Поэтому проверка распределения избыточна.

Это не вызывает прямых проблем; тест просто расточительный (и отступы ваш код больше, чем необходимо). Если ваш учебник использует эту технику, вы, вероятно, должны получить более новый учебник.

(Замечу также, что я должен был исправить интервал, чтобы сделать код соответствует;. Согласованность в программировании очень важно)

1

Короткий ответ «Нет, вы не можете сделать это.»

Связанный список, в значительной степени по определению, содержит указатели. По крайней мере, для долгосрочного хранения (т. Е. Всего, что сохранилось за пределами одного исполнения программы) вы не можете получить ничего значимого, сохранив указатель на диск, а затем снова зачитав его.

Сериализация структур данных которые содержат указатели, обычно требуют «преследования» этих указателей и «сглаживания» структуры каким-то образом. Для линейного связанного списка вы, вероятно, просто хотите записать узлы по порядку. Другая возможность заключается в замене смещений в файле для указателей на память. Это в первую очередь полезно, если вам нужно поддерживать один и тот же тип структуры на диске (например, вы хотите, чтобы дерево, которое вы можете манипулировать на диске, как фактическое дерево, а не просто последовательность записей).

В любом случае, вы идете на него, однако, простое хранение необработанных данных вряд ли будет полезно.

0

Если вы хотите сохранить связанный список на диск точно так же, как и то, что хранится в памяти, вы не можете. Поскольку указатели в связанном списке «изменчивы», то, на что они указывают, могут быть разными, когда вы запускаете свое приложение в разное время. Это означает, что бессмысленно упорствовать в указателях.

Но вы можете сохранить узлы в связанном списке, а также их отношения (которые ранее поддерживаются указателями) на диск. Если вы используете один связанный список, просто храните узлы один за другим, от головы до конца.

Смежные вопросы