c++ - 将void函数输出到txt

标签 c++ iostream

我只是在我的第二季度的 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.rdbuffreopendup2 )都会在任何多线程程序中造成巨大困惑。这可能不适用于初学者,但是当您开始使用线程时,您需要设计 I/O 函数以使用您想要的任何流,全局解决方案不会削减它。

关于c++ - 将void函数输出到txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201818/

相关文章:

c++ - 删除多个文件后出现 "too many open files"错误

c++ - 使用子模块应用程序编译 Modular Boost 1.55.0

c++ - 将 Lab 值转换为 opencv 中的 RGB 值

c++ - 多次从第一行读取文本文件(C++)

C++、ASM 和 cout

iostream 的 C++ 编译错误

c++ - 使用 Visual C++ 的 NaN ASCII I/O

java - 如何查看Java类的原生实现?

c++ - 对 abs 的模糊调用

c++ - 在 Visual Studio 2010 中使用 C++ iostream