med*_*ivh 5 c++ fstream vector visual-studio-2010
这是一个简单而复杂的问题.
这编译:
int Test;
vector<int> TEST;
TEST.push_back(Test);
cout << TEST.size();
Run Code Online (Sandbox Code Playgroud)
这不编译:
fstream Test;
vector<fstream> TEST;
TEST.push_back(Test);
cout << TEST.size();
Run Code Online (Sandbox Code Playgroud)
有什么特别的原因吗?有没有办法让我获得动态的fstream列表?
错误消息:
1>------ Build started: Project: vector_test, Configuration: Debug Win32 ------
1> vector_test.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\fstream(1347): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios(176) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_fstream<_Elem,_Traits>::basic_fstream(const std::basic_fstream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)
Luc*_*ini 11
该对象fstream不可复制.
如果你需要fstream在a中记录s,vector你可以声明std::vector<std::fstream*>并推回对象的地址.请记住,如果保存指针,则必须确保在访问时,对象仍处于活动状态.
在C++ 2011中,具体的流对象是可移动的.但是,要利用这一点,您需要传递临时或允许移动对象:
std::vector<std::ofstream> files;
files.push_back(std::ofstream("f1"));
std::ofstream file("f2");
files.push_back(std::move(file));
Run Code Online (Sandbox Code Playgroud)
请注意,file随着流的移动,您无法在此之后使用该变量files.