ostream无法显示c ++

时间:2016-03-07 19:58:46

标签: c++ overloading ostream display

我有一个项目,我在其中使用人员目录。在我的主要课堂上,我打电话给cout<< myDirectory<< ENDL;显示此目录中的完整人员列表。为此,我覆盖了<<目录类和Person类中的运算符。

在Directory类中,我出于特定原因使用Map,因此我以这种方式显示每个人:

 std::ostream& operator<<(std::ostream& os, const T& myDirectory)
{
  typedef map<Person, Location>::const_iterator Iterator;
  for(Iterator it=myDirectory.m_directory.begin();it!=myDirectory.m_directory.end;++it){
      os<<it->first<<endl;
}
return os;

为了做到这一点,我必须重载&lt;&lt; Person类中的运算符也是这样的:

ostream& operator<<(std::ostream& os, const Person& p){
    os << p.lastName << "," << p.firstName << endl;
    return os;
}

我的问题是它显示不正确。逗号位于姓氏和姓氏以及合并后的名字和种类之前。例如,如果我的名字是Jack Daniels,我会在输出中得到这个:

  

,Jackls

如果我使用endl;在姓氏和名字之后,它运作良好。例如:

os << p.lastName << endl;
os << "," << p.firstName << endl;

我得到了这个输出:

  

丹尼尔斯
  杰克

知道我做错了吗?

2 个答案:

答案 0 :(得分:2)

在这里猜测一下,因为你还没有提供一个完整的例子来说明这个问题,但我认为你会有一个尾随的回归&#39;姓氏末尾的字符。

它输出&#34; Daniels&#34;并将光标移回到行的开头,然后使用&#34;,Jack&#34;覆盖它,因此输出将是&#34;,Jackls&#34;

答案 1 :(得分:0)

Endl也会清理缓冲区。也许你应该添加out.flush()而不是endl,它会工作吗?只是猜测。