2014-11-21 123 views
0

我想打開多個文本文件並將流存儲爲矢量。打開多個文本文件的流

#include <vector> 
#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

int main() 
{ 

vector<string> imgSet 
vector<ofstream> txtFiles; 

// . 
// . 

    for(int i=0 ; i<imgSet.size() ; i++) 
    { 
      ofstream s; 
      s.open(imgSet[i].getName(), std::ofstream::out); 
      txtFiles.push_back(s); 
    } 

} 

的getName樣子:

const string& getName() const; 

我編譯這個與G ++ ubuntu上,我不明白爲什麼我得到它的錯誤一長串。如何解決這個問題

+0

什麼是'imgSet [i] .getName()'? 'std :: string'沒有成員函數'getName()'。 – 2014-11-21 10:51:12

回答

2

在C++ 03中,std :: fstream中沒有operator =或copy構造函數。 你可以這樣做:

vector<ofstream*> txtFiles; 
//... 
for(int i=0 ; i<imgSet.size() ; i++) 
{ 
     txtFiles.push_back(new ofstream(imgSet[i].getName(), std::ofstream::out)); 
} 
+0

那麼,我怎樣才能實現創建多個文件的目標? – mkuse 2014-11-21 10:17:44

+0

@mkuse我添加了一個示例,您可以如何實現此目的。 – FunkyCat 2014-11-21 10:20:47

+0

似乎不起作用,只是在我的問題中爲getName()添加了聲明 – mkuse 2014-11-21 10:28:55

2

各種iostream類既不是可複製的,也不轉讓。在pre-C++ 11的 中,向量的元素必須都是。關於唯一的解決方案 是使用std::ofstream*(可能包裝在一個類 確保適當的刪除)的載體。

在C++ 11中,iostream類已被製作成可移動的,並且矢量 已被擴展以允許可移動成員。所以,你可以寫的東西 像:

for (std::string const& fileName : imgSet) 
    txtFiles.emplace_back(fileName); 

此設或多或少C++ 11的支持;我不知道 g ++的狀態,但是這不會與我使用的版本(4.8.3)一起傳遞。我認爲 它比編譯器更像是一個庫的問題,它可能與 一起使用該庫的更新版本。 (別忘了編譯 和-std=c++11。)