C++ C++;:ostream和ofstream之间不需要的转换

C++ C++;:ostream和ofstream之间不需要的转换,c++,file,stream,persistence,overloading,C++,File,Stream,Persistence,Overloading,我一直在开发一个个人词典应用程序,它可以帮助你记住所学的单词。它是通过CLI操作的(不要对此提出疑问,这只是一个测试,我对CLI应用程序有一种奇怪的热情)。因此,我当然使用ostreams在CLI上编写信息。我习惯于编写操作符您只重载了特定的操作符。这不是说流的被隐式转换,而是ostream是流的的基类。这是事实,但我有点困惑,流的返回类型的方法可以返回ostream。我会反过来理解……你能展示出有问题的代码吗?@JETM当然可以。现在有一个“编辑2”提供此信息 ostream& ope

我一直在开发一个个人词典应用程序,它可以帮助你记住所学的单词。它是通过CLI操作的(不要对此提出疑问,这只是一个测试,我对CLI应用程序有一种奇怪的热情)。因此,我当然使用
ostream
s在CLI上编写信息。我习惯于编写
操作符您只重载了特定的
操作符。这不是说流的
被隐式转换,而是
ostream
是流的
的基类。这是事实,但我有点困惑,流的返回类型的方法可以返回ostream。我会反过来理解……你能展示出有问题的代码吗?@JETM当然可以。现在有一个“编辑2”提供此信息
ostream& operator<<(ostream&, const Dictionary&);
ofstream& operator<<(ofstream&, const Dictionary&);
ofstream& operator<<(ofstream& of, const Section& s) {
    return s.print_ofstream(of);
}
ofstream& Section::print_ofstream(ofstream& of) const {
    of << "sec" << Util::ID_TO_STRING(section_id) << ":\n";
    for (pair<Wordlist, Wordlist> pwl : translations) {
        of << '{' << pwl.first << '=' << pwl.second << "}\n";
    }
    of << "#\n";
    return of;
}
ostream& operator<<(ostream& o, const Wordlist& wl) {
    return wl.print_ostream(o);
}