C++ 中的 Ofstream 数组

Array of Ofstream in c++

本文关键字:数组 Ofstream 中的 C++      更新时间:2023-10-16

我希望在我的项目中使用 41 个输出文件来编写文本。 首先创建一个字符串数组list来命名这些输出文件 然后我尝试定义一个 ofstream 对象数组并使用 list 来命名它们,但我收到此错误,'outfile' cannot be used as a function.下面是我的代码:

#include <sstream>
#include <string>
#include <iostream>
#include <fstream>
using namespace std ;
int main ()
{
  string list [41];
  int i=1;
  ofstream *outFile = new ofstream [41];
  for (i=1;i<=41 ;i++)
  {
    stringstream sstm;
    sstm << "subnode" << i;
    list[i] = sstm.str();
  }
  for (i=0;i<=41;i++)
    outFile[i] (list[i].c_str());
  i=1;
  for (i=1;i<=41;i++)
    cout << list[i] << endl;
  return 0; 
}

有关以下修复,请参阅下文:

  1. 除非必须,否则不要使用 new(您泄漏了所有文件,没有正确销毁它们将导致数据丢失;如果您没有正确关闭它们,则可能不会刷新 ofstream,并且挂起的输出缓冲区将丢失)
  2. 使用正确的数组索引(从 0 开始!
  3. 默认构造的ofstream上调用.open(...)以打开文件
  4. 建议:
    • 我建议不要using namespace std;(下面未更改)
    • 我建议重复使用stringstream.这是很好的做法
    • 更喜欢使用C++式循环索引变量 ( for (int i = .... )。这可以防止意外i具有过多的范围。
    • 事实上,与
    • 时俱进,使用范围


#include <sstream>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
    ofstream outFile[41];
    stringstream sstm;
    for (int i=0;i<41 ;i++)
    {
        sstm.str("");
        sstm << "subnode" << i;
        outFile[i].open(sstm.str());
    }
    for (auto& o:outFile)
        cout << std::boolalpha << o.good() << endl;
}

不能像这样调用构造函数。 尝试调用outFile[i].open(list[i].c_str()) 。请注意"打开"。