卡卡西曦 发表于 2020-10-14 21:56:06

计算表达式运行时计算结果不正确

#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, OPTR;
        OPTR = '#';
        int top1 = -1, top2 = 0;
        int i, k, x, y, z, op;
        for (i = 0; str != '\0';)
        {
                if (str >= 48 && str <= 57)
                        OPND[++top1] = str = -48;
                else {
                        k = Comp(str, OPTR);
                        if (k == 1)
                                OPTR[++top2] = str;
                        else if (k == -1)
                        {
                                y = OPND;
                                x = OPND;
                                op = OPTR;
                                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;
}
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。

卡卡西曦 发表于 2020-10-14 23:50:02

乐乐学编程 发表于 2020-10-14 22:14
29行错误,错误码:C2784编译器无法从提供的函数参数中确定模板参数。
            
29行错误,错误码 ...

?第二十九是个if判断语句,哪来的什么get函数

卡卡西曦 发表于 2020-10-15 00:10:11

卡卡西曦 发表于 2020-10-14 23:50
?第二十九是个if判断语句,哪来的什么get函数

找到问题了‘,第三十行多了一个=

卡卡西曦 发表于 2020-10-15 00:17:41

找到问题了‘,第三十行多了一个=。

风过无痕1989 发表于 2020-10-15 00:49:03

卡卡西曦 发表于 2020-10-14 23:50
?第二十九是个if判断语句,哪来的什么get函数

记住:错误给出的行号,并不一定就是这一行,也可能是这一行的前一行,或者后一行引发的错误{:5_95:}
页: [1]
查看完整版本: 计算表达式运行时计算结果不正确