Массив Ofstream в переполнении стека

Я хочу, чтобы 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;
}

4

Решение

Ниже приведены следующие исправления:

  1. не использовать new если только вам не нужно (вы пропускали все файлы, и неправильное их удаление приведет к потере данных; ofstreams может не очиститься, если вы не закроете их должным образом, и ожидающий выходной буфер будет потерян)
  2. Используйте правильную индексацию массива (начиная с 0!)
  3. Вызов .open(...) на по-умолчанию, ofstream открыть файл
  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;
}
6

Другие решения

Вы не можете вызвать конструктор, как вы делаете. Попробуйте позвонить outFile[i].open(list[i].c_str()), Обратите внимание на «открыть».

1

По вопросам рекламы [email protected]