ostream 不显示 proberly c++

ostream does not display proberly c++

我有一个项目,我在其中使用了人员目录。在我的主 class 中,我调用 cout << myDirectory << endl;显示此目录中人员的完整列表。为此,我覆盖了 Directory Class 和 Person class.

中的 << 运算符

在目录中 class 我出于特定原因使用地图,所以我这样显示每个人:

 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;

为此,我还必须以这种方式重载 Person class 中的 << 运算符:

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;

我得到这个输出:

Daniels
,Jack

知道我做错了什么吗?

这里猜测,因为您没有提供完整的示例来说明问题,但我认为您的姓氏末尾会有一个尾随 'return' 字符。

它输出 "Daniels" 并将光标移回行首,然后用“,Jack”覆盖它,因此输出将是“,Jackls”

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