基本上我重载了插入操作符以返回我的类的字符串表示。但是,程序只是终止,除非我包含std :: endl。
template<class T>
std::ostream& operator << (std::ostream& outs, const LinkedQueue<T>& q) {
outs << "queue[";
if (!q.empty()) {
outs << q.front->value;
for (auto i = ++q.begin(); i != q.end(); ++i)
outs << ',' << *i;
}
outs << "]:rear";
return outs;
}
int main() {
QueueType queueType1;
queueType1.enqueue("L");
std::cout << queueType1 << std::endl;
return 0;
}
上面的main产生正确的输出:queue [L]:rear
但是,如果我从main中删除std::endl
,程序就会中断而不会产生任何内容。
我不能在重载方法中包含endl
,因为它会为我的字符串添加一个额外的字符,而不是我的字符串。有什么建议?
答案 0 :(得分:1)
正如@samevarshavchik建议的那样,使用std::flush
代替std::endl
来完成所需的输出。这可以在main中完成:
int main() {
QueueType queueType1;
queueType1.enqueue("L");
std::cout << queueType1 << std::flush;
/*^^^here^^^*/
return 0;
}
或者在你的重载函数中:
template<class T>
std::ostream& operator << (std::ostream& outs, const LinkedQueue<T>& q) {
outs << "queue[";
if (!q.empty()) {
outs << q.front->value;
for (auto i = ++q.begin(); i != q.end(); ++i)
outs << ',' << *i;
}
outs << "]:rear" << std::flush;
/*^^^here^^^*/
return outs;
}