编译器不使用运算符<<

Compiler doesn't use operator<<

我在将我的链接列表放入 << 运算符时遇到了一点问题。这是代码:

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*) 并且它输出一个内存地址,所以操作符还没有被使用。

the operator just doesn't run, the output is a memory address.

而不是这个:

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

你需要这个:

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

否则您将传递指向 operator<< 的指针。

您告诉编译器如何打印 Node,但您正在打印 Node *。这些是不同的类型。要获得您想要的行为,请尝试 cout << *first;cout << *bq.getFirst();.