C++ 将fstream加载到c++;
这是一个既简单又复杂的问题 这包括:C++ 将fstream加载到c++;,c++,visual-studio-2010,vector,fstream,C++,Visual Studio 2010,Vector,Fstream,这是一个既简单又复杂的问题 这包括: int Test; vector<int> TEST; TEST.push_back(Test); cout << TEST.size(); int检验; 病媒试验; 试验。推回(试验); cout vector_test.cpp 1> c:\program files(x86)\microsoft visual studio 10.0\vc\include\fstream(1347):错误C2248:“std::basic_ios
int Test;
vector<int> TEST;
TEST.push_back(Test);
cout << TEST.size();
int检验;
病媒试验;
试验。推回(试验);
cout vector_test.cpp
1> c:\program files(x86)\microsoft visual studio 10.0\vc\include\fstream(1347):错误C2248:“std::basic_ios::basic_ios”:无法访问在类“std::basic_ios”中声明的私有成员
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> c:\ProgramFiles(x86)\microsoft visual studio 10.0\vc\include\ios(176):请参阅“std::basic\u ios::basic\u ios”的声明
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
1> 此诊断发生在编译器生成的函数“std::basic_fstream::basic_fstream(const std::basic_fstream&)”中
1> 与
1> [
1> _Elem=char,
1> _Traits=std::char_Traits
1> ]
======生成:0成功,1失败,0最新,0跳过==========
对象fstream
不可复制
如果需要在
vector
中记录fstream
s,可以声明std::vector
并返回对象的地址。请记住,如果保存指针,则必须确保在访问该指针时,该对象仍处于活动状态。将类型推入vector的基本要求是该对象应可复制,fstream
不可复制,因此会出现编译器错误。要使用带有vector的类,该类必须可复制<代码>流不可用
见:
编辑:如果需要对同一个fstream进行多个引用,可以使用shared\u ptr来管理它们。尝试以下方法:
std::vector< std::shared_ptr<fstream> > TEST
std::vector测试
在C++ 2011中,具体的流对象是可移动的。然而,要利用这一点,您需要传递一个临时文件或允许移动对象:
std::vector<std::ofstream> files;
files.push_back(std::ofstream("f1"));
std::ofstream file("f2");
files.push_back(std::move(file));
std::矢量文件;
文件。向后推(std::of流(“f1”);
流文件(f2)的std::of;
文件。向后推(std::move(file));
注意,在流被移动到文件中,不能使用<代码>文件>代码>变量。< /P>对象不必是可复制的,以移动到容器中:这是C++ 2003的限制。类型可以移动就足够了,但您需要使用可以从中移动的对象,例如临时对象或std::move()
@DietmarKühl的结果。我一定要开始学习C++11,而且,emplace_back
intovector
在VS2013中运行良好。(尽管在GCC中失败)在C++中,这将成为可能:IoFielsFixes是可移动的,向量将支持可移动类型。@ MsAlter:引用C++ 11标准的一部分,上面提到的可能有帮助;-)弗兰克:,引用霍华德·希南特的话。
std::vector< std::shared_ptr<fstream> > TEST
std::vector<std::ofstream> files;
files.push_back(std::ofstream("f1"));
std::ofstream file("f2");
files.push_back(std::move(file));