输出void函数到txt

时间:2011-03-05 05:06:07

标签: c++ iostream

我只是在c ++的第二季度,所以请保持答案简单....

我有一个非常混乱的程序,包含linklist,class和file i / o 我已经完成了该程序,但我无法将其输出到.txt 这可能是我糟糕的编码布局,因为当我写这篇文章时输出让我不知所措。 有问题的功能是:

tag.display_balance(); 

请注意,此函数位于一个链接列表(标记)内,该列表进入一个类并调用函数(display_balance)来打印输出。

一切都很好地出现在控制台上。但我不知道怎么把它保存到.txt 一些谷歌和论坛搜索没有显示我能理解的任何内容。 我试过了:

ofstream BilloutPut;
BilloutPut.open("BillingStatements.txt");
BilloutPut<< tag.display_balance(); 

这是我学习如何输出到文件的唯一方法,但由于它是一个void函数,所以它不起作用。我想远离重载&lt;&lt;尽可能的功能。

-Thanks for looking

2 个答案:

答案 0 :(得分:6)

如果该函数执行自己的文件I / O,则会很困难(这就是为什么存在“关注点分离”软件设计指南的原因,这显然在这里被违反了)。重载operator <<无济于事,这个操作符放置在任何地方的函数都没有返回值。

如果您可以修改该函数,请让它接受一个参数,该参数是要写入的ostream对象(默认为cout)。

如果您无法修改该功能,但使用std::cout,则可以使用cout.rdbuf(newbuffer)通过将其与其他目的地相关联来重定向std::cout

如果函数使用其他一些I / O库,则可能必须使用freopen甚至dup2stdout(操作系统标准输出文件描述符)重新映射到另一个目标。

请注意,任何涉及重定向的技术(即cout.rdbuffreopendup2)都会在任何多线程程序中造成巨大的混乱。这可能不适合作为初级程序员,但是当你开始使用线程时,你需要设计你的I / O函数来使用你想要的任何流,全局解决方案就不会削减它。

答案 1 :(得分:0)

感谢您的回复,我想我将修改该功能,但我不知道如何使用ostream。

void linkD :: display_balance(){

ListNode *nodePtr;
nodePtr = head;

while (nodePtr){
    nodePtr->driver.print_balanceReport();
    cout<<endl;
nodePtr = nodePtr->next;
}


void driver::print_balanceReport(){
    nBalance=balance;
    cout<<get_firstName()<<" ";
    cout<<get_lastName()<<" ";
    cout<<get_dLicense()<<" ";
    cout<<get_vLicense()<<" ";
    cout<<get_nBalance()<<" ";
    cout<<get_passed()<<" ";
    cout<<get_differance()<<" ";}

从班级(司机)打印

所以我会将void更改为ostream并将其视为函数类型?也只是为了我的知识,我可以从主要遍历我的链表,以便我跳过功能?