2015-07-28 139 views
2

我有一個成員是std::ofstream fBinaryFile爲什麼在傳遞std :: ofstream作爲參數時使用「刪除」函數?

void setFile(std::ofstream& pBinaryFile) 
{ 
    fBinaryFile = pBinaryFile; 
} 

輸出:

Data.h:86:16: error: use of deleted function ‘std::basic_ofstream<char>& std::basic_ofstream<char>::operator=(const 
std::basic_ofstream<char>&)’ 
    fBinaryFile = pBinaryFile; 
       ^

我瞭解,副本std::ofstream是不允許的,也許我失去了一些東西。有可能將pBinaryFile的內容保存在fBinaryfile

+2

究竟是你想達到什麼目的?爲什麼你需要將'ofstream'複製到一個局部變量? – Petr

+2

您無法複製流,就像那樣簡單。您只能擁有對流的引用(或指針)。您嘗試解決的原始問題是什麼?你的用例是什麼? –

+1

儘管你可以使用引用或指針。 –

回答

6

因爲相關的操作員被聲明爲

ofstream& operator= (const ofstream&) = delete; 

這意味着它是明確禁止這樣ofstream語義不支持複製。

根據您的架構,您可以存儲指針/引用或將其移動。

+0

文檔中: 招: ofstream的運算符=(ofstream的&& rhs);我想不通,仍然沒有工作,我明白這個問題,但我不明白如何在fBinaryFile移動pBinaryFile 移動分配 收購的。通過移動分配其成員和基類來實現rhs的內容 – user3050386

+0

在'fBinaryFile = std :: move(pBinaryFile)'中使用'std :: move''但是確保你閱讀了移動操作並理解正在進行的操作當你這樣做時 –

+0

非常感謝你的幫助,但是這並沒有解決問題,我讀了文檔,我不明白我在想什麼,我希望不是編譯問題,我使用g ++ -std = C++ 11 ....... – user3050386

0

如果你想pBinaryFile到fBinaryFile你需要聲明pBinaryfile作爲ifstream的(輸入文件流)的內容,而不是使用ofstream(輸出文件流) 複製它應該是這個樣子:

std::ifstream pBinaryFile; 
std::ofstream fBinaryFile; 
std::stringstream sstream; 
std::string line 
pBinaryFile.open(pBinaryFileName.c_str()); 
fBinaryFile.open(fBinaryFileName.c_str()); 
if (pBinaryFile.isopen()) { 
    while (pBinaryFile.good()) { 
     getline(pBinaryFile, line); 
     fBinaryFile << sstream(line) << endl; 
    } 
} 
pBinaryFile.close(); 
fBinaryFile.close(); 

請注意,pBinaryFileName和fBinaryFileName引用您的文件的路徑。

此代碼可能存在錯誤,但我認爲解決方案與此類似。

我的建議是進一步閱讀:

http://www.cplusplus.com/doc/tutorial/files/

相關問題