You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编写逆波兰表达式求解程序出现==运算符不匹配报错如何解决

报错根因

你遇到的no operator "==" matches these operands -- operand types are: info == char编译错误,本质是你自定义的info联合体没有定义与char类型的相等比较规则,C++不会自动为自定义类型生成跨类型的比较运算符,所以你直接将info实例和字符做==比较时,编译器无法识别该操作。

修复方案
  1. 所有info和字符的比较逻辑显式访问ch成员
    所有涉及info类型和字符比对的代码,都要显式指定访问联合体的ch成员,修改示例:
// 原checkop函数内的判断
if (ch.ch == '+' ||ch.ch =='-'||ch.ch =='*'||ch.ch =='/'||ch.ch =='^')

// 原calc函数内的判断
if (curr.ch == ')')

// 原main函数内的判断
if (x.ch == 'B')
  1. 给info增加类型标记避免访问越界
    当前你的info联合体没有存储类型标记,运行时无法判断当前存储的是运算符字符还是数值,访问错误成员会导致未定义行为,建议修改info定义:
struct info
{
    // 类型标记,区分当前存储的是字符还是数字
    enum {CHAR, NUM} type;
    union {
        char ch;
        float num;
    };
};

后续赋值时同步设置type,比如存运算符时设type = CHAR,存数字时设type = NUM,访问前先判断type再访问对应成员。
3. 修复其他已知问题

  • 补充头文件:代码需要引入<iostream>、<cmath>头文件才能正常编译
  • 修复输入逻辑:C++不支持直接用cin给自定义info类型赋值,需要先读取输入内容,判断是数字还是运算符后再给info的对应成员赋值
  • 修复参数错误:eval函数调用时缺少运算符参数,insertxp、insertrst调用时参数类型不匹配的问题
  • 初始化栈指针:你定义的全局栈头指针st、rs没有初始化,直接使用会触发空指针崩溃,需要在main函数开头先初始化头节点

内容的提问来源于stack exchange,提问作者Agrim Kaundal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:48:04