首页 > 解决方案 > 我的代码中出现此错误,提示无效使用无效表达式

问题描述

在函数 vector in_to_post(vector infix) (vector=(1 + 2) * 3 ^ 4 )被转换为形式为 (Postfix: 1 2 + 3 4 ^ *) 的输出向量,我得到说明无效使用无效表达式的错误。我已经评论了我收到此错误的行。

    char get_optr(Token t) {
        // your code here
        return t.optr;
    }


vector<Token> in_to_post(vector<Token> infix) 
{
    vector<Token> output;
    // your code here
    stack<Token>b;
    for(int i=0;i<infix.size();i++)
    {
        if(is_opnd(infix[i]))
        {
             output.push_back (infix[i]);
        }
        else if(get_optr(infix[i])=='(')
        {
           b.push(infix[i]);
        }
       else if(get_optr(infix[i])==')')
        {
          while(b.empty()==false)
          {
              //char i=get_optr(b.pop());
            if(get_optr(b.pop())=='(')   // I am getting error here
            {
                break;
            }
            else
            {
               output.push_back(b.pop());  //error
            }
          }
        }
        else if(is_opnd(infix[i])==false)
        {
           // char i=infix[i];
            //char j=b.top();
            if((priority(infix[i])>priority(b.top()))||get_optr(infix[i])=='('||get_optr(infix[i])==')')
            {
                b.push(infix[i]);
            }
        }
        
    }
    while(b.empty()==false)
    {
        output.push_back(b.pop()); //error
    }

    return output;
}

标签: c++c++11

解决方案


问题是pop on astd::stack只是将顶部元素弹出堆栈,但不返回它。这个函数有一个void返回类型,如果你试图在需要一个值的上下文中使用它,你会得到一个错误

output.push_back(b.pop());  //error

相反,您可以使用top来获取顶部元素std::stack

output.push_back(b.top());  // ok

请注意,这将仅返回对顶部元素的引用而不弹出它。您可以调用poptop弹出它。


推荐阅读