2012-07-26 85 views
0

有沒有什麼辦法讓一個流(在一個文件中讀或寫)在C++中從一個函數打開到另一個?保持一個流從一個功能打開到另一個

+0

爲什麼你需要做到這一點?你試圖解決什麼問題? – 2012-07-26 19:43:46

+1

只需將它傳遞給函數而不關閉......如果這不能回答你的問題,請更具體。 – 2012-07-26 19:44:50

+1

我開始認爲在函數中可能有一個'fstream'對象。 – chris 2012-07-26 19:45:58

回答

1

是的,你可以的功能之外創建的流,並將其作爲參數傳遞給方法:

void myFunction(ifstream &stream) {...}

後來關閉流,當你用它做:stream.close()

或者在第一個函數中創建流並將其返回給調用方法,然後將其傳遞給第二個函數。

+0

在第一個函數中「創建」它會迫使你創建堆,因爲堆棧對象將超出範圍。我不鼓勵這樣做。 – Paranaix 2012-07-26 19:55:44

+0

我使用它的方法:'INT文件:: sendErrorOpeningStream(的std :: string ifstream_ofstream,的std :: ofstream的OUTPUTFILE,字符* WD)' 後來我想出了:_error C2664:「文件:: sendErrorOpeningStream ':不能將參數2從'std :: ostream'轉換爲'std :: ofstream'_ – 2012-07-26 20:02:42

+0

@ RobinLen'hog:流不可複製。所以你不能通過價值來傳遞它們。你必須通過參考。 – 2012-07-26 20:58:26

1

將其設爲全局或將其作爲參數傳遞,但要確保如果您將它作爲參數傳遞,則通過引用而不是按值超過它!如果你通過價值傳遞它,編譯器不會抱怨,奇怪的事情開始發生。

+1

我很確定它會抱怨你不能複製它。除此之外,第二種選擇要好得多。 – chris 2012-07-26 19:46:43

+0

@chris我還沒有看到編譯器抱怨它,但你可能是對的。儘管如此,通過參考是要走的路。 – 2012-07-26 19:47:58

+0

我得到'使用已刪除的函數...'。這是C++ 11特有的;那時我不確定它是怎麼回事。 – chris 2012-07-26 19:50:53

2

傳遞它通過參考

void myFunction(ifstream &myStream) 
+0

完全是首選的方式。 – Paranaix 2012-07-26 19:54:34