来自 char 的 C++ 枚举

2024-02-15

好的,我是 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 to an enum- 你必须明确地这样做:

return curr_tok = static_cast<token_value> (ch);

不过要小心!如果你的都没有enum价值观符合你的char,那么结果就很难使用了:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 char 的 C++ 枚举 的相关文章

随机推荐

  • Java中如何连接两个字符串数组

    我正在使用 JDK 1 7 和 Eclipse 并尝试连接两个字符串数组 String a1 a12 b12 String a2 c12 d23 ewe fdfsd 我努力了 String both ObjectArrays concat
  • java中如何从数组中随机生成唯一的数字

    我想随机生成一个数组中的数字 每个数字也应该是唯一的 我给出了这段代码 请帮我 请不要建议数组列表 因为我正在为黑莓应用程序构建黑莓API不支持数组列表或集合或哈希集 因此请建议我仅在这段代码中使用数组 Random rgen new Ra
  • Spring中的BeanPostProcessor和init/destroy方法有什么区别?

    实施与实施有什么区别BeanPostProcessor接口并使用init destroySpring中XML配置文件中的方法属性或实现InitializingBean DisposableBean界面 Spring 文档对此有非常清楚的解释
  • 正则表达式不会产生错误回显,有人可以帮助我吗?

    当字段不正确时 正则表达式不会产生错误回显 除此之外 我得到警告 preg match function preg match 编译失败 缺少 在第 58 行的偏移 12 处 任何人都可以帮助我吗我非常绝望 array array erro
  • 数据表|组内更快的逐行递归更新

    我必须执行以下递归逐行操作才能获得z myfun function xb a b z NULL for t in 1 length xb if t gt 2 a t b t 1 xb t z t rnorm 1 mean a t b t a
  • 在 TypeScript (Angular) 中打开下载链接

    我的问题很简单 我有这个界面 http snag gy CsVyN jpg用 Angular 构建 当我单击 1 时 它会打开弹出窗口 然后当我单击 2 时 它会调用一个函数 showDownloadLink ev name let con
  • 在 Visual Studio 窗口窗体中的面板上使用不透明度有什么技巧吗?

    我最近开始探索 Visual Studio 我试图创建一个幻灯片菜单 更具体地说 当用户按下按钮时 右侧会弹出一个子菜单 为了实现这一目标 我放置了一个Panel调整自身大小 除了功能之外 我想添加更多设计并使Panel显得有点褪色 我知道
  • 在 emacs 中使用 ipdb 调试 python

    import pdb pdb set trace 当我跑步时效果很好M x pdb python manage py runserver However import ipdb会导致上述语句无限期挂起 我听说 ipdb 很棒 我如何在 em
  • 将foreignObjects添加到D3强制导向图节点会破坏事件

    我目前正在学习 D3 可视化 在处理强制导向图时 我需要在节点上显示国家标志 很多国家的标志 我决定使用单个 png 背景和 CSS spritesheet 来减少对服务器的请求数量 由于 svg 元素不能有背景位置属性 因此无法通过 CS
  • 如何设计goroutines程序来处理api限制错误

    刚刚开始了解 goroutine 的强大功能 我有大约 100 个帐户和大约 10 个区域 循环它们以使用 golang 创建大约 1000 个 goroutine 以提高读取速度 它运行速度太快 以至于达到了 20 秒的 API 返回限制
  • Android 复选框在一个活动中选中,然后按钮出现在另一活动中

    这个问题说明了一切 假设有 2 个活动 活动 A 和 活动 B 活动 A 在选中时保留一个复选框 按钮应显示在 活动 B 上 未选中时按钮应隐藏在 活动 B 上 以下是主要活动 public class MainActivity exten
  • 必须声明标量变量

    RowFrom int RowTo int 都是存储过程的全局输入参数 因为我正在使用 T SQL 编译存储过程中的 SQL 查询 然后使用Exec sqlstatement 在存储过程的末尾显示结果 当我尝试使用 RowFrom or R
  • 如何通过 vimeo api 获取视频统计信息

    我想通过 api 调用获取我的 vimeo 帐户中的视频统计信息 我在用着https api vimeo com me videos stats https api vimeo com me videos stats端点获取统计信息 如其文
  • KoGrid JSON 动态小部件,具有嵌套服务器调用

    我正在使用 KOGrid 开发一个仪表板 我的想法是动态创建一堆小部件并将每个小部件的数据绑定到 kogrid 中 我有两个控制器 MVC4 其中第一个返回小部件名称列表 第二个以 JSON 格式返回每个小部件的结果 数据表 我正在使用 J
  • 如何使用 Go 漂亮地打印 JSON?

    有谁知道在 Go 中漂亮打印 JSON 输出的简单方法吗 我想漂亮地打印结果json Marshal 以及格式化现有的 JSON 字符串 使其更易于阅读 MarshalIndent http golang org pkg encoding
  • 从 iOS 应用程序上的 UDP 服务器接收数据无法在 Linux 服务器上工作,但可以在 macbook pro 上工作 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 背景 我做
  • 如何在编译时检测“严格别名”?

    严格别名 https stackoverflow com questions 98650 what is the strict aliasing rule 优化需要特别注意源代码 s a 使用联合而不是指针强制转换 有没有办法使用预处理器指
  • 限制 C# 中通用子类方法可以接受的类型

    如果标题不明确或者重复 我深表歉意 我今天花了很多时间阅读有关泛型的内容 并寻找类似的情况 但无济于事 我正在写一个小游戏引擎 其中一个方面是 单元 承载资源的能力 有些单位可以携带任何资源 有些单位仅限携带某些专门资源 为此 我有以下结构
  • 使用 jQuery 读取 RSS 提要

    我正在尝试使用他们的 RSS feed 和 jquery 来显示我最新的偶然发现的项目的标题 我的功能是 function get stumbleupon get http rss stumbleupon com user fredkell
  • 来自 char 的 C++ 枚举

    好的 我是 C 新手 我拿到了 Bjarne 的书 我正在尝试遵循计算器代码 但是 编译器会吐出有关此部分的错误 token value get token char ch do skip whitespace except n if st