Перегрузка оператора для приращения enum
У меня есть это перечисление, и я просто хочу увеличить объект этого перечисления на одно место.
enum Month {
january = 1,
february,
march,
april,
may,
june,
july,
august,
september,
october,
november,
december
};
С объектом моего enum, Month m, я просто хочу переместить переменную объекта на одну позицию.
Month operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
С Месяцем &m в качестве параметра я получаю ошибку, что он должен принимать int в качестве аргумента. Поэтому, если я сделаю "(Month &m, int)", он скажет, что "должен принять либо ноль, либо один аргумент". Я прочитал, что вам не нужен Month &m, если перегрузка вашего оператора является функцией-членом, поэтому я удалил ее. После этого я получаю еще одну ошибку: "нет совпадения для" оператора ++ "(тип операнда" Месяц ")". Есть что-то, чего мне не хватает?
Основной код:
class Date {
int y, d, month_end; // private
Month m;
public:
Date(int yy, Month mm, int dd)
: y(yy), d(dd), m(mm) {
}
Month& operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
void add_month() {
++m;
}
1 ответ
В комментарии вы сказали:
Есть что-то, что я пропускаю? http://ideone.com/uOkSk0
Да. Вы определяете функцию в необычном месте - внутри определения Date
, Это должна быть функция, не являющаяся членом.
использование пространства имен std;
enum Month {
january = 1,
february,
march,
april,
may,
june,
july,
august,
september,
october,
november,
december
};
Month& operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
class Date {
int y, d;
Month m;
public:
Date(int yy, Month mm, int dd) // constructor
: y(yy), d(dd), m(mm) { // member initializer
}
void add_month() {
++m;
}
};
int main()
{
Month m = january;
++m;