2017-09-26 7 views
0

J'essaie de créer une fonction getIdFromFile dans files.cpp qui prend 3 paramètres : (une chaîne C++ représentant un nom de fichier, un istream et un ostream) et retourne un int.Fonction C++ avec 3 paramètres pour la lecture en entrée binaire générique

Voici le code de départ j'ai:

// 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); 

} 

Je reçois l'erreur:

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

Y at-il quelque chose que je dois inclure ou ajouter de la bibliothèque standard?

Merci

+3

Un 'std :: istream' générique n'a pas de méthode' open'. Vous devriez passer dans un 'std :: fstream' ou' std :: ifstream' à la place, qui est conçu pour fonctionner avec des fichiers. – Squidy

+0

Je suis sûr que vous obtenez un peu plus d'erreurs de compilation avec ce code. Soit ça, ou ce n'est pas du vrai code. –

+0

Toutes ces instructions 'using' et vous n'en utilisez aucune. – user4581301

Répondre

0

Vous devriez considérer soit

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

ou

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

Dans le premier cas, vous attendez un nouveau ou un flux de fichier fermé que vous ouvrez. Vous devez définir tous les paramètres (par exemple, le mode). En principe, vous devez prévoir une gestion des erreurs, par exemple si le nom du fichier n'est pas valide. Dans le second cas, vous ouvrez le fichier ailleurs et transmettez un flux. Mais vous pouvez aussi passer un flux de chaîne si vous le souhaitez.