Перегрузка разыменовывает оператор

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

Что я делаю неправильно?

9
задан big-z 24 March 2010 в 07:52
поделиться

3 ответа

Вы должны применить оператор разыменования к типу класса. В вашем коде x имеет тип указателя. Напишите следующее:

int t = **x;

или

int t = x->operator*();
14
ответ дан 4 December 2019 в 07:34
поделиться

Если вы хотите, чтобы исходный код работал, вам нужно перегрузить оператор int-cast для вашего класса:

operator int() const { return 5; }
1
ответ дан 4 December 2019 в 07:34
поделиться

Вы разыменовываете указатель на X . Ваш класс в порядке (насколько он реализован).

int main()
{
    X x; // no pointer
    int t = *x; // x acts like a pointer
}
14
ответ дан 4 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: