我只是在我的第二季度的 c++ 所以请保持简单的答案....
我有一个非常困惑的程序,包含链接列表、类和文件 i/o 我几乎完成了该程序,但我无法将其输出到 .txt 这可能是我糟糕的编码布局,因为当我写这篇文章时我忘记了输出。 有问题的功能是:
tag.display_balance();
请注意,此函数位于进入类的链接列表(标记)内,并调用函数 (display_balance) 来打印输出。
控制台输出的一切都很好。但我不知道如何将它保存到 .txt 一些谷歌和论坛搜索没有显示任何我能理解的东西。 我试过:
ofstream BilloutPut;
BilloutPut.open("BillingStatements.txt");
BilloutPut<< tag.display_balance();
这是我学会如何输出到文件的唯一方法,但由于它是一个无效函数,所以它不起作用。如果可能的话,我想避免重载 << 函数。
-感谢观看
最佳答案
如果该函数执行其自己的文件 I/O,这将很困难(这就是存在“关注点分离”软件设计指南的原因,它显然在这里被违反了)。重载operator <<
将无济于事,函数没有返回值供此类运算符放置在任何地方。
如果您可以修改该函数,让它接受一个参数,即 ostream
要写入的对象(这可以默认为 cout
)。
如果你不能修改函数,但它使用std::cout
, 你可以使用 cout.rdbuf(newbuffer)
重定向 std::cout
通过将它与另一个目的地相关联。
如果该函数使用其他一些 I/O 库,您可能必须使用 freopen
甚至 dup2
重新映射 stdout
(操作系统标准输出文件描述符)到另一个目的地。
请注意,任何涉及重定向的技术(即 cout.rdbuf
、 freopen
和 dup2
)都会在任何多线程程序中造成巨大困惑。这可能不适用于初学者,但是当您开始使用线程时,您需要设计 I/O 函数以使用您想要的任何流,全局解决方案不会削减它。
关于c++ - 将void函数输出到txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201818/