Перегрузка оператора = не работает

0

Я хочу перегрузить оператор = и у меня есть следующая оператор-функция

int IntegerClass::operator=(IntegerClass integer) {
  return  integer.number;
}

Это должно быть правильно?

В другом классе я хочу назначить частному элементу объектов (int) другому int, т.е.

int x = integerClass; 

но когда я компилирую, я получаю следующую ошибку

error: cannot convert 'std::IntegerClass' to 'int' in initialization

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

  • 1
    int x = integerClass не вызывает никаких операторов (это инициализация, а не присваивание), и особенно это не IntegerClass::operator= . Если таковые имеются, вы можете попробовать реализовать IntegerClass::operator int() вместо этого для поддержки неявного преобразования в int .
  • 2
    Что это за std::IntegerClass ? Стандартная библиотека не имеет такого класса AFAIK. Вы добавили свой класс в std ? Плохо.
Показать ещё 3 комментария
Теги:
operator-overloading

1 ответ

4
Лучший ответ

Ваш оператор перегружает назначение одного IntegerClass другому, но вы пытаетесь назначить (фактически инициализацию) встроенный int. Вам нужно определить оператор неявного преобразования.

Код должен быть чем-то вроде этого (извините, я не помню точный синтаксис)

IntegerClass::operator int() {
  return number;
}
  • 2
    Чтобы расширить это немного: int x = integerClass; не является оператором присваивания. Если вы сделали int x; x = integerClass; тогда это будет задание.
  • 1
    Вероятно, стоит упомянуть, что введение классов в пространство имен std - очень плохая идея (и, возможно, неопределенное поведение IIRC), за исключением случаев, когда это разрешено.
Показать ещё 2 комментария

Ещё вопросы

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