我想打开多个文本文件并将流存储为矢量。
#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 ++编译它,我不明白为什么我会得到一长串错误。如何解决这个问题
答案 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
。)