Компилятор не использует оператор <<
У меня возникла небольшая проблема с добавлением связанного списка в оператор <<. Вот код:
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<<
,