Как считать объекты в вектор?

у меня задание. необходимо записать в объекты информацию и запихнуть в файл. а затем вытащить оттуда их и поместить в контейнер(я выбрала вектор, но если вы считаете что лист лучше я приму к сведению) функция по записи:

const char *FName="teacher_file";

int save(int k)
{
        int key;
        char fio[100];
        int c;

        ofstream fout(FName,ios::binary|ios::app);
        for(int i=1; i<=k; i++)
        {

        cout<<"Введите ФИО: ";
        cin.ignore();
        cin.getline(fio, 100);
        cout<<"Введите ключ: ";
        cin>>key;
        cout<<"Введите класс: ";
        cin>>c;
        Teacher s(key, fio, c);
        fout.write((char*)&s, sizeof(Teacher)); 
        }
        fout.close();
}

и функция read:

void read (int k)
{
    ifstream fout(FName, ios::binary|ios::in);
    Teacher S;
    vector<Teacher> teachers;
    while (!fout.eof())
    for(int i=1; i<=k; i++)
    {
    fout.read ((char*)&S, sizeof(Teacher));
    if(fout.eof()) break;
    teachers.push_back(S);
    for(int i = 0; i < teachers.size(); i++)
        cout << teachers[i] << ' ';//[Error] cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
    }
    fout.close();
}

в комментарии я привела ошибку из-за которой он этот вектор выводить не хочет. была еще идея создать отдельный класс где будет поле vector teachers. это вроде глобальнее, но программа просто не видит этот вектор хоть я и подключила хедер. Вопросы: что за ошибку мне выдают, надо ли создавать отдельный класс для контейнера, как это исправить


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

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

В цикле вывода содержимого контейнера: cout << teachers[i] << ' '; У объекта класса Teacher не перегружен оператор потока вывода (Вот примеры). То, что вы передавали в конструктор (буду называть эти переменные fio, key и c) и скорее всего присвоили свойствам класса, можно вывести через отдельные методы класса, т.е. создать getFio(), getKey() или getC(), если они содержат модификатор доступа private. Т.е. cout << teachers[i].getFio() << ' '; и т.д.

→ Ссылка