鱼C论坛

 找回密码
 立即注册
查看: 1148|回复: 5

[已解决]计算表达式运行时计算结果不正确

[复制链接]
发表于 2020-10-14 21:56:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;
#include<string>
class Expression
{
public:
        Expression(string str);
        ~Expression();
        int Compute();
private:
        int Comp(char str1, char str2);
        string str;
};
Expression::Expression(string str)
{
        this->str = str + "#";
}
Expression :: ~Expression()
{
}
int Expression::Compute()
{
        char OPND[100], OPTR[100];
        OPTR[0] = '#';
        int top1 = -1, top2 = 0;
        int i, k, x, y, z, op;
        for (i = 0; str[i] != '\0';)
        {
                if (str[i] >= 48 && str[i] <= 57)
                        OPND[++top1] = str[i++] = -48;
                else {
                        k = Comp(str[i], OPTR[top2]);
                        if (k == 1)
                                OPTR[++top2] = str[i++];
                        else if (k == -1)
                        {
                                y = OPND[top1--];
                                x = OPND[top1--];
                                op = OPTR[top2--];
                                switch (op)
                                {
                                case'+':z = x + y; break;
                                case'-':z = x - y; break;
                                case'*':z = x * y; break;
                                case'/':z = x / y; break;
                                default:break;
                                }
                                OPND[++top1] = z;
                        }
                        else {
                                top2--;
                                i++;
                        }
                }
        }
        return OPND[top1];
}
int Expression::Comp(char str1, char str2)
{
        switch (str1)
        {
        case'+':case'-':if (str2 == '(' || str2 == '#')return 1;
                   else return -1;
                break;
        case'*':case'/':if (str2 == '*' || str2 == '/')return -1;
                   else return 1;
                break;
        case'(':return 1; break;
        case')':if (str2 == '(')return 0; else return -1;
                break;
        case'#':if (str2 == '#')return 0; else return -1;
                break;
        default: break;
        }
}

int main()
{
        string str;
        cout << "请输入一个表达式:" << endl;
        cin >> str;
        Expression E(str);
        int result = E.Compute();
        cout << "表达式的值是:" << result << endl;
        return 0;
}
最佳答案
2020-10-14 22:14:28
29行错误,错误码:C2784  编译器无法从提供的函数参数中确定模板参数。
            
29行错误,错误码:C2776  在 property 扩展特性中仅可指定一个 get 函数。 当指定多个 get 函数时,发生此错误。

32行错误,错误码:C2664:

“function”:无法将参数编号从“type1”转换为“type2”
某参数无法转换为所需类型。 如果创建某个类的实例,然后尝试对用 explicit 关键字标记的构造函数进行隐式转换,则可能发生此错误。
如果将临时对象传递给采用指向对象的引用作为参数的函数,则该引用必须是常数引用。
如果使用不是函数所预期的类型的参数调用该函数,则使用适当的构造函数创建临时对象。 然后将该临时对象传递给函数。 在这种情况下,该临时对象用于初始化引用。 在该语言的早期版本中,所有的引用都可以由临时对象进行初始化。
要解决 C2664,
再次检查给定函数的原型,并改正错误信息中指出的参数。
如果需要的话,提供显式转换。
如果某个类在它的一个基类中隐藏了成员,也可能生成 C2664。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-14 22:14:28 | 显示全部楼层    本楼为最佳答案   
29行错误,错误码:C2784  编译器无法从提供的函数参数中确定模板参数。
            
29行错误,错误码:C2776  在 property 扩展特性中仅可指定一个 get 函数。 当指定多个 get 函数时,发生此错误。

32行错误,错误码:C2664:

“function”:无法将参数编号从“type1”转换为“type2”
某参数无法转换为所需类型。 如果创建某个类的实例,然后尝试对用 explicit 关键字标记的构造函数进行隐式转换,则可能发生此错误。
如果将临时对象传递给采用指向对象的引用作为参数的函数,则该引用必须是常数引用。
如果使用不是函数所预期的类型的参数调用该函数,则使用适当的构造函数创建临时对象。 然后将该临时对象传递给函数。 在这种情况下,该临时对象用于初始化引用。 在该语言的早期版本中,所有的引用都可以由临时对象进行初始化。
要解决 C2664,
再次检查给定函数的原型,并改正错误信息中指出的参数。
如果需要的话,提供显式转换。
如果某个类在它的一个基类中隐藏了成员,也可能生成 C2664。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-14 23:50:02 From FishC Mobile | 显示全部楼层
乐乐学编程 发表于 2020-10-14 22:14
29行错误,错误码:C2784  编译器无法从提供的函数参数中确定模板参数。
            
29行错误,错误码 ...

?第二十九是个if判断语句,哪来的什么get函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-15 00:10:11 | 显示全部楼层
卡卡西曦 发表于 2020-10-14 23:50
?第二十九是个if判断语句,哪来的什么get函数

找到问题了‘,第三十行多了一个=
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-15 00:17:41 | 显示全部楼层
找到问题了‘,第三十行多了一个=。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-15 00:49:03 | 显示全部楼层
卡卡西曦 发表于 2020-10-14 23:50
?第二十九是个if判断语句,哪来的什么get函数

记住:错误给出的行号,并不一定就是这一行,也可能是这一行的前一行,或者后一行引发的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表