2017-09-26 75 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) 

在你期待一个新的或,你会打开一个封闭的文件流尚属首例。您需要定义所有参数(例如模式)。原则上你应该预见一些错误处理,例如,如果文件名无效。

在第二种情况下,你会打开该文件在其他地方,并通过流。但是如果你愿意的话,你还可以传递一个字符串流。