打开流的多个文本文件

时间:2014-11-21 10:13:36

标签: c++ vector fstream

我想打开多个文本文件并将流存储为矢量。

#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;

我在ubuntu上使用G ++编译它,我不明白为什么我会得到一长串错误。如何解决这个问题

2 个答案:

答案 0 :(得分:2)

C ++ 03中的std :: fstream中没有operator =或copy构造函数。 你可以这样做:

vector<ofstream*> txtFiles;
//...
for( int i=0 ; i<imgSet.size() ; i++ )
{
        txtFiles.push_back( new ofstream(imgSet[i].getName(), std::ofstream::out) );
}

答案 1 :(得分:2)

各种iostream类既不可复制也不可分配。在 在C ++之前的11中,向量的元素必须是两者。关于唯一的解决方案 是使用std::ofstream*的向量(可能包含在一个类中 确保正确删除。)

在C ++ 11中,iostream类已经可以移动了,而vector也有了 已扩展到允许可移动成员。所以你可以写一些东西 像:

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

这假设或多或少的C ++ 11支持;我不知道的状态 g ++,但这并没有通过我使用的版本(4.8.3)。我认为 它比编译器更像是库的问题,它可能会起作用 使用更新版本的库。 (别忘了编译 与-std=c++11。)