我有一个项目,我在其中使用人员目录。在我的主要课堂上,我打电话给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;
我得到了这个输出:
丹尼尔斯
杰克
知道我做错了吗?
答案 0 :(得分:2)
在这里猜测一下,因为你还没有提供一个完整的例子来说明这个问题,但我认为你会有一个尾随的回归&#39;姓氏末尾的字符。
它输出&#34; Daniels&#34;并将光标移回到行的开头,然后使用&#34;,Jack&#34;覆盖它,因此输出将是&#34;,Jackls&#34;
答案 1 :(得分:0)
Endl也会清理缓冲区。也许你应该添加out.flush()而不是endl,它会工作吗?只是猜测。