2017-09-26 11 views
0

3の パラメータを取るfiles.cppで関数getIdFromFileを作成しようとしています(ファイル名、istream、ostreamを表すC++文字列) int。一般的なバイナリ入力で読み込むための3つのパラメータを持つ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) 

のいずれかを検討すべきです。すべてのパラメータ(たとえば、モード)を定義する必要があります。原則として、ファイル名が無効な場合など、エラー処理を予見する必要があります。

2番目のケースでは、ファイルを別の場所で開き、ストリームを渡します。しかし、もし望むなら、文字列を渡すこともできます。

関連する問題