Я хочу перегрузить оператор = и у меня есть следующая оператор-функция
int IntegerClass::operator=(IntegerClass integer) {
return integer.number;
}
Это должно быть правильно?
В другом классе я хочу назначить частному элементу объектов (int) другому int, т.е.
int x = integerClass;
но когда я компилирую, я получаю следующую ошибку
error: cannot convert 'std::IntegerClass' to 'int' in initialization
Что не так с моей реализацией перегрузки оператора и как должна выглядеть функция?
Ваш оператор перегружает назначение одного IntegerClass другому, но вы пытаетесь назначить (фактически инициализацию) встроенный int. Вам нужно определить оператор неявного преобразования.
Код должен быть чем-то вроде этого (извините, я не помню точный синтаксис)
IntegerClass::operator int() {
return number;
}
int x = integerClass;
не является оператором присваивания. Если вы сделали int x; x = integerClass;
тогда это будет задание.
std
- очень плохая идея (и, возможно, неопределенное поведение IIRC), за исключением случаев, когда это разрешено.
int x = integerClass
не вызывает никаких операторов (это инициализация, а не присваивание), и особенно это неIntegerClass::operator=
. Если таковые имеются, вы можете попробовать реализоватьIntegerClass::operator int()
вместо этого для поддержки неявного преобразования вint
.std::IntegerClass
? Стандартная библиотека не имеет такого класса AFAIK. Вы добавили свой класс вstd
? Плохо.