Вы используете свои методы неправильно.
void Date::SetDate(istream &input, Date & D){
input >> D.SetDay(day) >> D.SetMonth(month) >> D.SetYear(year);
input.ignore();
}
D.SetDay
возвращает void
и не может использоваться таким образом. Вы можете исправить это так:
void Date::SetDate(istream &input, Date & D){
unsigned day_in;
string month_in;
unsigned year_in;
input >> day_in >> month_in >> year_in;
D.SetDay(day_in);
D.SetMonth(month_in);
D.SetYear(year_in);
}
Однако, есть причина быть таким многословным. Поскольку SetDate
является функцией-членом, ей не нужно передавать объект Date
, и он может напрямую обращаться к закрытым членам:
void Date::SetDate(istream &input){
input >> day >> month >> year;
}
Чем больше idomati c, тем лучше предоставить >>
Перегрузка как свободная функция:
std::istream& (std::istream &in, Date& d){
input >> d.day >> d.month >> d.year;
}
Но вам нужно объявить его как friend
из Day
, чтобы он мог получить доступ к закрытым членам.
PS: только после написания этого я заметил что у вас уже есть перегрузка как свободная функция. Вместо того, чтобы сделать этот вызов SetDate
, он может реализовать ввод напрямую. Ваш SetDate
не добавляет ничего полезного.