Оператор разыменования перегрузки

Я пытаюсь перегрузить оператор разыменования, но компиляция следующего кода приводит к ошибке '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; }
Другие вопросы по тегам