如何将 istream 传递给 c++ 中的函数?

Posted

技术标签:

【中文标题】如何将 istream 传递给 c++ 中的函数?【英文标题】:How can I pass an istream to a function in c++? 【发布时间】:2016-04-21 16:13:25 【问题描述】:

编辑:我在一次提交中更改了多个代码部分而没有意识到这一点,导致 cmets 中的大部分混乱。

现在我可以看到问题应该是什么了:

例子:

int ncharf()

    char neww;
    myfile.get(neww);
    return (int)neww;

myfile 是 istream

【问题讨论】:

【参考方案1】:

您忘记将 myfile 作为参数传递。

int ncharf(istream &myfile)

    char neww;
    myfile.get(neww);
    return (int)neww;

另外,正如@Barmar 评论的那样:The argument to .get() must be of type char, not int

如果你想从二进制文件中读取 int,你应该使用 istream::read 代替:

int ncharf(istream &myfile)

    int neww;
    myfile.read((char*)&neww, sizeof(int));
    return neww;

【讨论】:

myfile 有可能是一个全局变量,不需要传递。 @ThomasMatthews 查看 OP 收到的错误消息。它抱怨.get 没有应用于类对象。 如果我想以二进制模式从文件中读取一个int,我需要在get方法中指定int的大小,否则它读取一个特点。例如:myfile.get((char *) &new, sizeof(int)). get() 读取 char 和 c-strings 而不是 int,如果遇到分隔字符(默认为'\n')将停止读取。

以上是关于如何将 istream 传递给 c++ 中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多维动态数组传递给C++中的函数

C++ - 实现我自己的流

如何将零填充的多维数组传递给 C++ 中的函数?

如何将测试夹具传递给 C++ GTest 中的辅助函数

如何将多维数组传递给 C 和 C++ 中的函数

如何将函数指针传递给成员函数c++?