Оператор разыменования перегрузки
Я пытаюсь перегрузить оператор разыменования, но компиляция следующего кода приводит к ошибке 'initializing' : cannot convert from 'X' to 'int'
:
struct X {
void f() {}
int operator*() const { return 5; }
};
int main()
{
X* x = new X;
int t = *x;
delete x;
return -898;
}
Что я делаю неправильно?
3 ответа
Решение
Вы должны применить оператор разыменования к типу класса. В вашем коде x
имеет тип указателя. Напишите следующее:
int t = **x;
или же
int t = x->operator*();
Вы разыменовываете указатель на X
, Ваш класс в порядке (насколько это реализовано).
int main()
{
X x; // no pointer
int t = *x; // x acts like a pointer
}
Если вы хотите, чтобы оригинальный код работал, вам нужно перегрузить оператор int-cast для вашего класса:
operator int() const { return 5; }