类型'std :: istream *'和'char'到二进制'运算符>>'的操作数无效

时间:2014-02-22 20:50:18

标签: c++ c++11

我有一个基本功能:

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;

1 个答案:

答案 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');

在找到新的换行符之前,最多会忽略字符中的最大流大小。