我有一个自定义类,我为其定义了一个自定义类型转换 operator char()
, 称之为 A
.现在,假设我想要一个此类的数组但具有附加功能,所以我定义了一个新类 B
通过成员变量 array
实现类型 std::vector<A>
.
我想要的东西之一B
要处理的是将其数据打印到屏幕上,所以我创建了一个 friend
功能
ostream& operator<<(ostream& out, const B& b)
{
// invoking custom cast works fine here
for(int i=0;i<array.size();++i) out.put((char)array[i]);
// without the following out.flush() we get segfault
out.flush()
}
出于某种原因,当我省略 out.flush()
时最后的语句会导致段错误。我宁愿那里没有冲洗,因为应该由用户选择何时冲洗流(我相信?)所以任何人都可以澄清为什么没有它会崩溃吗?
谢谢!
最佳答案
你必须在那里归还一些东西。当然,已经为您提供了流,所以您应该:
return out;
作为运算符的最后一行。请注意,调用 out.flush()
可能是偶然的,使一些寄存器(比如 EAX)保存流的值,因此被返回(根据标准调用约定),这就是来电者正在期待。 但是您必须确定添加最后一个返回
。
关于c++ - ostream& operator<< 没有 flush() 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423880/