Сначала:
friend ostream& operator <<(ostream& out, const CCity& obj);
не определяет функцию-член! Объявление функции (оператора) как friend
делает ее автономной, даже если она определена внутри класса. Так что внутри people
объекта нет. Вам нужно сослаться на obj.people
!
Тогда почему вы объявляете iter
перед l oop? Вам нужен итератор по какой-либо причине после? Если нет, предпочитайте хранить его локально для l oop. Затем вы можете дополнительно разрешить вывод типа: for(auto iter = ...
. auto
дополнительно покроет еще одну ошибку: obj
является константой, поэтому obj.people
также является константой. И перегрузка begin
для постоянных объектов не вернет iterator
, а const_iterator
! Знайте, что есть две версии begin:
iterator begin();
const_iterator begin() const; // <- that one will be called on const objects!
Вы бы разбили l oop между? Если нет, вы также можете использовать диапазон, основанный на l oop: for(auto& person : obj.people)
. Снова тип person
выводится, как мы явно указали auto
как ссылку, тип будет Person const&
.
Какой бы вариант вы ни выбрали, вы можете теперь вывести человека:
out << *iter;
out << person;
Предполагая, что они были опубликованы c, вы также можете получить доступ к атрибутам человека:
iter->name;
person.name;