来自 char 的 C++ 枚举

标签 c++ enums char

好的,我是 C++ 的新手。我拿到了 Bjarne 的书,我正在尝试遵循计算器代码。

但是,编译器会吐出关于此部分的错误:

token_value get_token()
{
    char ch;

    do {        // skip whitespace except '\n'
        if(!std::cin.get(ch)) return curr_tok = END;
    } while (ch!='\n' && isspace(ch));

    switch (ch) {
        case ';':
        case '\n':
            std::cin >> WS;      // skip whitespace
            return curr_tok=PRINT;
        case '*':
        case '/':
        case '+':
        case '-':
        case '(':
        case ')':
        case '=':
            return curr_tok=ch;
        case '0': case '1': case '2': case '3': case '4': case '5':
        case '6': case '7': case '8': case '9': case '.':
            std::cin.putback(ch);
            std::cin >> number_value;
            return curr_tok=NUMBER;
        default:            // NAME, NAME=, or error
            if (isalpha(ch)) {
                char* p = name_string;
                *p++ = ch;
                while (std::cin.get(ch) && isalnum(ch)) *p++ = ch;
                std::cin.putback(ch);
                *p = 0;
                return curr_tok=NAME;
            }
            error("bad token");
            return curr_tok=PRINT;
}

它吐出的错误是这样的:

calc.cpp:42: error: invalid conversion from ‘char’ to ‘token_value’

token_value 是一个枚举,如下所示:

enum token_value {
    NAME,       NUMBER,     END,
    PLUS='+',   MINUS='-',  MUL='*',  DIV='/',
    PRINT=';',  ASSIGN='=', LP='(',   RP=')'
};
token_value curr_tok;

我的问题是,如何将 ch(从 cin)转换为关联的枚举值?

最佳答案

您不能将 char 隐式转换为 enum - 您必须显式地执行此操作:

return curr_tok = static_cast<token_value> (ch);

但是要小心!如果您的 enum 值都不匹配您的 char,那么将很难使用结果 :)

关于来自 char 的 C++ 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1297385/

相关文章:

c++ - char* 到 const wchar_t * 转换

c++ - 使用并行构建时 PRE_TARGETDEPS 失败

Python 一行获取枚举类列表的所有值的组合列表

c++ - 删除链表中的前面元素

c# - 为什么 Enum.Parse() 返回对象?

c++ - 将状态枚举的全局更改为函数中的 int 值

c++ - cpp dll char指针分配,写入内存访问冲突

c - 如何在 C 中确定字符序列的顺序(无数组!)

c++ - 在 C++ 中使用 Boost-Python 访问 Python 中定义的函数数组

使用派生类的 C++ 模板转换