перегрузка оператора * для структуры

Требуется, чтобы унарный оператор * возвращал значение поля data. Подскажите, пожалуйста, в чём состоит моя ошибка.

/*...*/

struct Node{
    int data;
    Node *prev, *next;

    Node(int const& data, Node* next = nullptr, Node* prev = nullptr)
    : data(data)
    , next(next)
    , prev(prev) {}

    Node(int&& data, Node* next = nullptr, Node* prev = nullptr)
    : data(std::move(data))
    , next(next)
    , prev(prev) {}

    /*...*/

    int operator *(Node* p) {
        return p->data;
    }
};

int main() {
    Node* c = new Node(5);
    std::cout << *c; // fail
}

Ответы (1 шт):

Автор решения: AR Hovsepyan

У вас аргумент оператора лишний. Функции_члены класса первым аргументом неявно получают указатель(this) на данный объект, поэтому оператор нужно определить так:

int operator *() {
    return data;
}

Для каждого объекта оператор вернет свое целочисленное значение, и можно написать так:

Node obj(5);
std::cout << *obj; 

А указатель нужно разыменовывать:

Node* c = new Node(5);
std::cout << **c; // или же
std::cout << c->operator*(); 
→ Ссылка