Я использую этот код в моем предыдущем вопросе:
Добавление реализации года в c ++ с использованием класса
Я хочу использовать оператор if для проверки дат таким образом, чтобы, если день был 31, он возвращался к 0, а месяц увеличивался на единицу. Я даже пытался написать другой метод и использовать его внутри операции +, но это также не удалось, потому что я увеличиваю день в функции возврата внутри объявления операции. В результате его нужно будет увеличивать перед проверкой условий в первую очередь! но что, если номер был изначально 31? нет месяца с 32 днями!
Я пытался использовать его, но из-за моей реализации он не работал должным образом
Мой другой вопрос заключается в том, что я пытаюсь использовать булеву проверку ссылок также с операцией ==
Это то, что я сделал до сих пор:
bool operator==(const Date&) const;
bool Date::operator==(const Date& date) const
{
if (day == date.day && monthnum == date.monthnum && year == date.year)
return true;
else return false;
}
но по какой-то причине, когда я пытаюсь проверить его в основном, например, date1 == date2, он не компилируется!
я пишу это неправильно?
«нет операции == соответствует этим операндам», это ошибка, которую я получаю, когда пытаюсь скомпилировать код
Я хочу использовать оператор if для проверки дат таким образом, чтобы, если день был 31, он возвращался к 0, а месяц увеличивался на единицу.
Это так просто реализовать, как:
if (day == 31) {
day = 0;
monthnum++;
}
Я пытаюсь проверить это в основном, говоря, например, date1 == date2, он не компилируется! я пишу это неправильно?
Да, хорошо, вы объявляете бесплатную функцию operator==
, а то, что вы хотите, это функция-член. внутри Date
делать:
class Date {
public:
// ...
bool operator==(const Date&) const;
// ...
};
Вы также можете использовать бесплатную функцию, если честно, но это потребует дополнительных изменений, и в целом это то же самое. На всякий случай, если вы хотите использовать его, вот как:
bool operator==(const Date& lhs, const Date& rhs) {
return (lhs.day == rhs.day && lhs.monthnum == rhs.monthnum && lhs.year == rhs.year);
}
(Я удалил лишнюю if-else
пара).
Компилятор утверждает, что «нет операции == соответствует этим операндам». У меня просто есть этот код в моей основной: cout << date1 == date2;
Да, вы должны сделать это вместо этого:
cout << (date1 == date2);
иначе то, что читает компилятор, таково:
(cout << date1) == date2;
Других решений пока нет …