这是一个既简单又复杂的问题。
这将编译:
int Test;
vector<int> TEST;
TEST.push_back(Test);
cout << TEST.size();
这不会编译:
fstream Test;
vector<fstream> TEST;
TEST.push_back(Test);
cout << TEST.size();
有什么特别的原因吗?有什么方法可以让我得到一个动态的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 ==========
5条答案
按热度按时间bmvo0sr51#
对象
fstream
不可复制。如果你需要在一个
vector
中记录fstream
,你可以声明一个std::vector<std::fstream*>
,并将对象的地址推回。记住,如果你保存了指针,那么你必须确保,当你访问它时,对象仍然是活的。v1l68za42#
在C++ 2011中,具体的流对象是可移动的。然而,要利用这一点,你要么需要传递一个临时变量,要么允许对象被移动:
请注意,在此之后不能使用
file
变量,因为流已移动到files
中。gorkyyrv3#
要使用带有向量的类,它必须是可复制的。
fstream
不是。参见:C++ std::ifstream in constructor problem
5ktev3wc4#
将类型推入vector的基本要求是对象应该是可复制的,
fstream
是不可复制的,因此会出现编译器错误。unhi4e5o5#
就像其他人提到的,
fstream
是不可复制的。并像这样使用:
甚至可以这样迭代: