我只是在我的第二季c ++所以请保持答案简单....
我有一个非常混乱的程序,链接列表,类和文件i/o我已经完成了程序,但我不能把它输出到.txt它可能是我糟糕的编码布局,因为输出时我的想法我写了这个.有问题的功能是:
tag.display_balance();
Run Code Online (Sandbox Code Playgroud)
请注意,此函数位于链接列表(标记)内,该列表进入类并调用函数(display_balance)以打印输出.
一切都出来到控制台就好了.但我不知道怎么把它保存到.txt上几个谷歌和论坛搜索没有显示任何我能理解的内容.我试过了:
ofstream BilloutPut;
BilloutPut.open("BillingStatements.txt");
BilloutPut<< tag.display_balance();
Run Code Online (Sandbox Code Playgroud)
这是我学习如何输出到文件的唯一方法,但由于它是一个无效函数,它没有用.我想尽可能避免重载<<函数.
- 谢谢你
如果该函数执行自己的文件I/O,则会很难(这就是为什么存在"关注点分离"软件设计指南的原因,这显然在这里被违反了).重载operator <<不会有帮助,这个操作员放置任何地方的功能都没有返回值.
如果你可以修改函数,让它接受一个参数,该参数是ostream要写入的对象(这可以默认为cout).
如果您无法修改该功能,但它可以使用std::cout,您可以通过cout.rdbuf(newbuffer)将std::cout其与另一个目的地相关联来进行重定向.
如果该函数使用其他一些I/O库,则可能必须使用freopen甚至dup2重新映射stdout(OS标准输出文件描述符)到另一个目标.
而且要注意,任何涉及重定向的技术(即cout.rdbuf,freopen和dup2)将作出巨大的混乱在任何多线程程序.这可能不适合作为初级程序员,但是当你开始使用线程时,你需要设计你的I/O函数来使用你想要的任何流,全局解决方案就不会削减它.