编译器不使用运算符<<

时间:2015-10-15 11:46:37

标签: c++ operator-overloading

我将链接列表放到<<<<<<运营商。这是代码:

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;(首先是Node *)并输出一个内存地址,因此无法使用运算符。

2 个答案:

答案 0 :(得分:2)

  

操作员不运行,输出是内存地址。

而不是:

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

你需要这个:

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

否则您将指针传递给operator<<

答案 1 :(得分:2)

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