Добавление в List

не могу реализовать запись в двухсвязный список. где-то я делаю ошибку и при новой записи старые записи удаляются.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <list>
#include <iterator>

using namespace std;

typedef struct {
    char author[30];
    char title[30];
} SONG;


int add()
{
    char a[30];
    cin >> a;     /*значение этой переменной я хочу записать в список*/


    list <SONG> myList;

    SONG singer;

    ofstream fout("data.bin", ios::binary | ios::out);
    
    myList.push_front(singer);
    strcpy_s(singer.author, a);

    list<SONG>::iterator it;   /*вот тут я хочу вставить значение переменной ПОСЛЕ первого элемента*/
    it = myList.begin();
    myList.insert(++it, singer);

    fout.write((char*)singer.author, sizeof(singer.author)); /*значение записываю в бинарный файл*/
   
    fout.close();


    return 0;
}


int main()
{
    cout << "Enter your number :";
    int input;
    cin >> input;

    switch (input)
    {
    case 1:
        add();
        break;
    default:
        cout << "Error";
        break;
    }

  
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Странная деятельность... Вставляете неинициализированное значение в список, потом инициализируете, опять вставляете. Непонятно.

А в файле - да, тут старые записи теряются: ведь вы каждый раз открываете файл заново, перезаписываете, закрываете. Вы уж или откройте файл и пишите подряд, или подумайте об использовании флага ate -

ofstream fout("data.bin", ios::binary | ios::ate );
→ Ссылка