Есть несколько проблем с вашим кодом (см. Комментарии), но одна из них, о которой вы спрашиваете, связана с этой строкой:
out << group[i].getInfo();
Как упоминал ДжонФайло, group
- это Group
объект, а не std::vector
. Если вы хотите получить доступ к std::vector
group
в классе Group
, вам потребуется group.group
:
out << group.group[i].getInfo();
Это решит эту проблему , но это только Справедливо предупредить вас, что вы скоро поразите других. Я рекомендую прочитать комментарии к вашему вопросу и выяснить, как их исправить.
Здесь стоит отметить, что одна из причин, по которой вы видите это, - вы, возможно, не понимаете, что operator<<()
не является функцией-членом Group
. То есть, даже если вы определите это встроенным образом так:
class Group : public Student {
//...
friend ostream& operator<<(ostream& out, const Group& group) { // overloaded operator of output
out << "\nThere are " << group.size << " students in the group.\n";
for (int i = 0; i < group.size; i++)
{
out << "Student # " << i + 1 << ":\n";
out << group[i].getInfo();
}
return out;
}
};
Может показаться, что он является членом Group
, но на самом деле это не так. Это внешняя friend
функция. На самом деле это не часть Group
. Это означает, что вы не можете получить доступ к членам данных напрямую. Например,
this->size
потерпит неудачу, потому что, опять же, на самом деле это не функция-член.
Если вы хотите получить доступ к элементам данных Group
, вам нужно получить к ним доступ через экземпляр, который вы передали (т. е. group
:
group.size
Обратите внимание, что это означает, что когда вы делаете что-то вроде group.size
, вы фактически получаете элемент данных Group::size
, а не size()
от std::vector
.