2013-11-01 139 views
0

我想创建四个string对象vector,和四个ofstream目的,string对象用于名称输出文件和ofstream对象用于写入数据。使用std ::矢量<的std :: string *>和std ::矢量<性病:: ofstream的*>

#include <vector> 
#include <fstream> 

std::vector<std::string*> myFileNames; 
std::vector<std::ofstream*> myFiles; 
int id[4]={1,2,3,4}; 

for(int i=0; i<4; i++) 
{ 
    myFiles.push_back(new std::ofstream); 
    myFileNames.push_back(new std::string); 

} 

int tmp[4]; 

for(int i=0; i<4; i++) 
{ 

    tmp[i] = id[i] ; 
    myFileNames[i] = "file"; 
    myFileNames[i] += tmp[i]; 
    myFileNames[i] += " .csv "; 

    std::cout<< "Opening file:" << myFileName[i] << std::endl; 
    myFiles[i].open (myFileNames[i].c_str()); 
    myFiles[i]<< "a,"; 
} 

的问题是,从该行 - myFileNames[i] = "file";的错误发生,看来我不能给的值myFileNames成员以这种方式,任何人都可以帮助我,就像我想创建四个具有四个不同名称的文件,并在循环中给它们赋值。

+0

你不需要指针的向量。改为使用'std :: vector '和'std :: vector '。要创建对象,请使用'myFiles.push_back(std :: ofstream())'和'myFileNames.push_back(“”)''。乍一看,其余部分应该保持原样。 – zneak

+0

您正在为引用'std :: string *'的向量元素分配一个'const char *'。你期望什么,编译器会产生你的意思*它要做什么? (并且没有理由使用'std :: string *'指针的向量来开始)。 – WhozCraig

+0

@zneak:流是不可复制的(所以你不能把它们放在一个向量中)。 –

回答

0

myFileNames[i]根据你的声明,不是一个字符串对象,而是一个指向字符串的指针。我不确定为什么这样宣布。
做它
std::vector<std::string> myFileNames;
std::vector<std::ofstream> myFiles;
没有指针。

您还应该使用对push_back的调用删除for循环,因为您不需要在它们中存储任何内容。

+0

请注意,iostreams是不可复制的,因此只要您尝试推回“std :: ofstream”,它就会报错。 –

+0

@JesseGood:如果你推回一个r值,它将在C++ 11中工作,因为它们是可移动的。 –

+0

@BenjaminLindley:的确,尽管libstdC++还没有将移动构造函数添加到它的iostreams中(不知道OP在使用什么) –

相关问题