2017-09-26 107 views
0

我試圖在files.cpp即需要3個 參數創建一個函數getIdFromFile:(一C++串表示一個文件名,一個IStream,和一個ostream),並返回一個int。C++帶有三個參數的函數在一般的二進制輸入讀取

這是啓動代碼,我有:

// files.cpp 
#include "files.hpp" 
#include <iostream> 
#include <fstream> 
using std::ofstream; 
using std::ifstream; 
using std::ostream; 
#include <sstream> 
using std::string; 
using std::stringstream; 
using std::istream; 
using std::istringstream; 

int getIdFromFile (std::string(fileName),std::istream &usersData, std::ostream theStream){ 

    &usersData.open(fileName, std::ios::in|std::ios::binary); 

} 

,我發現了錯誤:

No member named 'open' in 'std::__1::basic_istream<char>' 

有什麼我需要包括或從標準庫添加?

感謝

+3

一個通用的'的std :: istream'沒有一個'open'方法。你應該傳遞一個'的std :: fstream'或'的std ::而不是ifstream',其目的是處理文件。 – Squidy

+0

我敢肯定,你得到相當多幾個編譯錯誤與代碼。要麼,要麼這不是真正的代碼。 –

+0

所有這些'using'陳述和不使用其中任何一個。 – user4581301

回答

0

你應該考慮要麼

int getIdFromFile (std::string fileName, std::ifstream &usersData, std::ostream &theStream) 

int getIdFromStream (std::istream &usersData, std::ostream &theStream) 

在你期待一個新的或,你會打開一個封閉的文件流尚屬首例。您需要定義所有參數(例如模式)。原則上你應該預見一些錯誤處理,例如,如果文件名無效。

在第二種情況下,你會打開該文件在其他地方,並通過流。但是如果你願意的話,你還可以傳遞一個字符串流。