Как считать объекты в вектор?
у меня задание. необходимо записать в объекты информацию и запихнуть в файл. а затем вытащить оттуда их и поместить в контейнер(я выбрала вектор, но если вы считаете что лист лучше я приму к сведению) функция по записи:
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 шт):
В цикле вывода содержимого контейнера: cout << teachers[i] << ' '; У объекта класса Teacher не перегружен оператор потока вывода (Вот примеры). То, что вы передавали в конструктор (буду называть эти переменные fio, key и c) и скорее всего присвоили свойствам класса, можно вывести через отдельные методы класса, т.е. создать getFio(), getKey() или getC(), если они содержат модификатор доступа private. Т.е. cout << teachers[i].getFio() << ' '; и т.д.