我有一个类,它接受一个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);
答案 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);
}
在旁注中,我建议您在这种情况下避免使用指针,而是使用引用,因为它实现了相同的目的,除了它看起来更清晰。