我的重载操作符<<函数


ostream & operator<<(ostream &out, const IntList &rhs)
{
    IntNode *i = rhs.head;
    out << rhs.head;
    while (rhs.head != 0)
    {
        out << " " << i;
        i = rhs.head->next;
    }
    return out;
}

程序编译成功,但没有输出任何内容。有什么问题吗?

您需要使用i而不是rhs.head

 while (i != 0)
 {
   out << " " << i;
   i = i->next;
 }

rhs.head != 0不能被循环中的内容所改变,所以如果它为假,循环将永远不会运行,如果它为真,它将永远循环下去。

i = rhs.head->next;也将始终将i设置为第二个节点(头部之后的一个),而不是i之后的一个。

我假设输入列表为空,因此rhs.head != 0条件失败?否则实际上会导致无限循环,因为测试的是rhs.head而不是i。我想应该是:

IntNode *i = rhs.head;
out << rhs.head;
while (i != 0) // note the i here
{
    out << " " << i;
    i = i->next; // again i here
}

第二个问题是什么是out流,因为至少头指针应该打印在那里…

相关内容

  • 没有找到相关文章

最新更新