c++ - ostream 不显示 proberly c++

标签 c++ overloading ostream display

我有一个项目,我在其中使用了人员目录。在我的主课中,我调用 cout << myDirectory << endl;显示此目录中人员的完整列表。为此,我覆盖了目录类和人员类中的 << 运算符。

在 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;

为此,我还必须以这种方式重载 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;

我得到这个输出:

Daniels
,Jack

知道我做错了什么吗?

最佳答案

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

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

关于c++ - ostream 不显示 proberly c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35852846/

相关文章:

c++ - SSL_CTX_load_verify_locations 和可信证书

c++ - 解决歧义的方法

c - 是否可以在 C 中重载运算符?

c++ - ostream:在 cout 或文件上输出的类

c++ - 如何传递 ostream 对象?

c++ - 与 ‘operator<<’ 不匹配(可能是因为我的 c++/gcc 版本?)

c++ - 为什么只有在列表初始化的情况下才会出现缩小转换警告?

c++ - 将大小为 4 字节的管道读入 4 字节 int 如何返回更多数据?

c++ - 函数作用域类型的全称是什么?

r - R 中引用类的函数重载?