Компилятор не использует оператор <<

У меня возникла небольшая проблема с добавлением связанного списка в оператор <<. Вот код:

ostream& operator<<(ostream& o,const Node& f)
{
    Node *p = new Node(f.val);
    p->next = f.next;
    p->prev = f.prev;
    o << "[";
    while(p->next->val != -1)
    {
        p = p->next;
        o << p->val << " ";
    }
    o << "]" << endl;
    delete p;
    return o;
}

Поэтому, когда я использую его в main(), это выглядит так:

BiQueue bq();
bq.Push(5);
...
cout << bq.getFirst();

Но после тестирования оператор просто не запускается, вывод - это адрес памяти. Итак, я проверил это прямо так:cout << first; (где first это Node*), и он выводит адрес памяти, поэтому оператор не использовался.

2 ответа

Решение

Вы сказали компилятору, как распечатать Node, но вы печатаете Node *, Это разные типы. Чтобы получить поведение, которое вы хотите попробовать cout << *first; а также cout << *bq.getFirst();,

оператор просто не запускается, вывод является адресом памяти.

Вместо этого:

Node *first = ...;
cout << first;

Ты нуждаешься в этом:

Node &first = ...;
cout << first;

Так как в противном случае вы передаете указатель на operator<<,

Другие вопросы по тегам