Открытие нескольких текстовых файлов ofstream

0

Я хочу открыть несколько текстовых файлов и сохранить потоки в виде вектора.

#include <vector>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{

vector<string> imgSet
vector<ofstream> txtFiles;

// .
// .

    for( int i=0 ; i<imgSet.size() ; i++ )
    {
            ofstream s;
            s.open( imgSet[i].getName(), std::ofstream::out );
            txtFiles.push_back( s );
    }

}

getName выглядит так:

const string& getName() const;

Я компилирую это с помощью G++ на ubuntu, я не понимаю, почему я получаю с ним длинный список ошибок. Как это можно зафиксировать

  • 0
    Что такое imgSet[i].getName() ? std::string не имеет функции-члена getName() .
Теги:
vector
fstream

2 ответа

2
Лучший ответ

В С++ 03 нет конструктора operator = или copy в std :: fstream. Вы можете сделать это:

vector<ofstream*> txtFiles;
//...
for( int i=0 ; i<imgSet.size() ; i++ )
{
        txtFiles.push_back( new ofstream(imgSet[i].getName(), std::ofstream::out) );
}
  • 0
    затем, как я могу достичь своей цели создания нескольких файлов?
  • 0
    @mkuse Я добавил пример, как вы можете достичь этого.
Показать ещё 3 комментария
2

Различные классы iostream не являются ни гибкими, ни присваиваемыми. В pre-С++ 11 элементы вектора должны быть обоими. Единственное решение - использовать вектор std::ofstream* (возможно, завернутый в класс для обеспечения правильного удаления).

В С++ 11 классы iostream были сделаны подвижными, а вектор был расширен, чтобы позволить перемещаемые элементы. Таким образом, вы могли бы написать что-то вроде:

for ( std::string const& fileName : imgSet )
    txtFiles.emplace_back( fileName );

Это предполагает более или менее поддержку С++ 11; Я не знаю статус g++, но это не соответствует той версии, которую я использую (4.8.3). Я думаю, что это скорее проблема библиотеки, чем компилятор, и она может работать с более новой версией библиотеки. (Не забудьте скомпилировать с -std=c++11)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню