2013-11-01 183 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在使用什麼) –

相關問題