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
流,因为至少头指针应该打印在那里…