我有一个基本功能:
TokenType getToken(istream *in, string& recognized){
char token;
in >> token;
if (token=='#'){
in.ignore('\n');
in >> token;
}
return T_UNKNOWN;
}
(TokenType
只是一个枚举。)
出于某种原因,使用G ++编译时,in >> token;
行都会出现此错误:
error: invalid operands of types ‘std::istream* {aka std::basic_istream<char>*}’ and ‘char’ to binary ‘operator>>’
为什么编译器会抛出此错误?我希望能够从char
指向的流中提取一个in
,如果char
是一个英镑符号,则跳到下一行。
为了子孙后代,我的包括:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <regex>
using namespace std;
答案 0 :(得分:6)
您需要取消引用您的istream指针
(*in) >> token;
in->ignore('\n');
或者更改为引用而不是指针。
TokenType getToken(istream & in, string& recognized);
您必须通过取消引用指针来更改调用函数的方式。
getToken(*in, recognized);
正如0x499602D2也指出的那样,使用in->ignore('\n');
对你的用法没有意义,你会想要使用:
in->ignore(std::numeric_limits<std::streamsize>::max(), '\n');
在找到新的换行符之前,最多会忽略字符中的最大流大小。