Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将fstream加载到c++;_C++_Visual Studio 2010_Vector_Fstream - Fatal编程技术网

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
into
vector
在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));