读取istream指针中的字符

时间:2018-01-27 22:17:42

标签: c++

我有一个类,它接受一个istream指针并逐个读取对象。虽然每当我尝试阅读一个角色时,我都会得到以下内容

cannot bind non-const lvalue reference of type ‘std::basic_istream<char>::char_type& {aka char&}’ to an rvalue of type ‘std::basic_istream<char>::char_type {aka char}’

istream中的函数看起来像这样

void foo(istream *is){
    while(is->get(ch)){
       // do something
    }
}

我正在传递像这样的istream

istream is(cin.rdbuf());
reader.foo(&is);

1 个答案:

答案 0 :(得分:2)

当您使用ch时,它的类型错误(正如您在评论中提到的那样); std::basic_istream::get期望值char的值(因为这是std::basic_istream::char_type定义为的),但是传递类型为unsigned char的值会产生错误。将类型更改为char以解决您的问题。

以下是展示该示例工作的一些最小代码:

#include <iostream>

using namespace std;

void foo(istream* is){
    char ch;
    while(is->get(ch)){
       // do something
       break;
    }
}

int main()
{
    istream is(cin.rdbuf());
    foo(&is);
}

在旁注中,我建议您在这种情况下避免使用指针,而是使用引用,因为它实现了相同的目的,除了它看起来更清晰。