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