Класс не может содержать операторные функции для внутреннего определенного перечисления?

0

Я создал класс с указанным в нем перечислением. Я также хотел определить некоторые операторы для перечисления следующим образом:

class MyClass
{
    public:
        enum MyEnum { CONSTA, CONSTB, CONSTC };
        // ...
        MyEnum& operator++(MyEnum& orig);
        MyEnum operator++(MyEnum& orig, int);
        // ...
}

Для этого кода gcc сообщает следующее сообщение об ошибке:

.../MyClass.h|10|error: postfix ‘MyClass::MyEnum& MyClass::operator++(MyClass::MyEnum&) must take ‘int as its argument
.../MyClass.h|11|error: ‘MyClass::MyEnum MyClass::operator++(MyClass::MyEnum&, int) must take either zero or one argument

Это означает, что компилятор считает, что я хочу написать оператора для MyClass, а не для MyEnum. Поэтому он хочет, чтобы я уменьшил аргументы.

Мой вопрос:

Может ли класс каким-то образом содержать операторные функции для чего-то другого, кроме самого себя (например, для внутреннего типа), или я должен перемещать эти функции вне MyClass?

  • 0
    Просто опустите параметры MyEnum& orig для объявлений сигнатур операторов.
  • 0
    @ πάντα ῥεῖ Если бы я не был достаточно ясен: я не хочу писать операторы для MyClass , я хочу написать один для MyEnum . Я пропустил параметр MyEnum& orig , как бы я MyEnum& orig к переменной enum, которую я хочу увеличить изнутри функции?
Показать ещё 10 комментариев
Теги:
class
methods
enums
operator-overloading

1 ответ

1

Вы можете использовать глобальные перегрузки операторов для этого

class MyClass
{
    public:
        enum MyEnum { CONSTA, CONSTB, CONSTC };
};

MyClass::MyEnum& operator++(MyClass::MyEnum& orig) { return ++orig; }
MyClass::MyEnum operator++(MyClass::MyEnum& orig, int) 
    { MyClass::MyEnum temp = orig++; return temp; }

Смотрите компилируемый код здесь, пожалуйста.

  • 0
    Просто сделав их дружественными функциями, это тоже сработает.
  • 0
    @dyp Я не вижу необходимости, так как MyEnum общедоступен и в противном случае будет почти бесполезным.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню