C/C++

Программирование С++. Помогите, пожалуйста, решить задачу.

Задача: Вводятся три целых числа d, m, y, которые вместе обозначают
дату: d (day) – день, m (month) – месяц, y (year) – год. Если дата введена
корректно, найти и вывести дату предыдущего дня в том же формате: день месяц
год. С високосным годом можно так решить проблему – это год, который нацело
делится на 4.
Обязательное использование подпрограмм и наличие комментариев к действиям в коде.
 #include  

// константа, хранящая количество дней в месяце в невисокосном году
const int base[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// количество месяцев в году
const int limit = 12;

// цикл високосного года
const int vis = 4;

// ввод дня, месяца и года
void insert_date(int & d, int & m, int & y)
{
std::cin >> d >> m >> y;
}

// проверка високосности года
bool is_visokos(const int y)
{
return y % vis == 0; // если делится на 4 без остатка, то считать год високосным
}

// проверка правильности введённой даты
bool is_date(const int d, const int m, const int y)
{
if(y == 0) return false; // нулевого года не бывает

if(m > limit || m < 1) return false; // пределы значения месяца

if(d < 1) return false; // день -- положительное число

if(m == 2)
{ // в феврале нужна проверка високосности года
if(is_visokos(y))
{
if(d - 1 > base[m]) return false; // в високосном году в феврале на 1 день больше
}
else
{ // если день больше, чем положено в месяце, то это неправильная дата
if(d > base[m]) return false;
}
}
else
{
if(d > base[m]) return false;
}

return true; // проверка прошла успешно
}

// сообщение о неправильной дате выводится на экран
void error_msg(void)
{
std::cout
ЕТ
Евгений Тураев
9 833
Лучший ответ
Евгений Тураев Я не знаю английского, возможно что фраза wrong date некорректна. Исправьте её, если это так.
Виталий Шамкин Проблема в этом коде возникает насчет 29 февраля високосного года. Эта дата сохраняется при вычислении предыдущего дня, а при её вводе программа не считает это ошибкой. Не знаете, как можно это исправить в вашем коде?
 #include  
using namespace std;
struct Data {
int d;
int m;
int y;
private:
friend istream& operator>>(istream& inp, Data& data) {
return inp >> data.d >> data.m >> data.y;
}
friend ostream& operator
Виталий Шамкин Проблема в этом коде возникает насчет 29 февраля високосного года. Эта дата сохраняется при вычислении предыдущего дня, а при её вводе программа не считает это ошибкой. Не знаете, как можно это исправить в вашем коде?