Оператор разыменования перегрузки - PullRequest
9 голосов
/ 24 марта 2010

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

14 голосов
/ 24 марта 2010

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

int t = **x;

или

int t = x->operator*();
14 голосов
/ 24 марта 2010

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

int main()
{
    X x; // no pointer
    int t = *x; // x acts like a pointer
}
1 голос
/ 24 марта 2010

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

operator int() const { return 5; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...