C++ 将对bool的引用设置为stack.top等于boolean堆栈,会引发错误的访问错误。Can';我不明白为什么';发生什么事了
以下代码位于函数中,结果是对布尔值的引用 trueValues和false值是导致true或false语句的字符集C++ 将对bool的引用设置为stack.top等于boolean堆栈,会引发错误的访问错误。Can';我不明白为什么';发生什么事了,c++,stack,boolean,data-management,C++,Stack,Boolean,Data Management,以下代码位于函数中,结果是对布尔值的引用 trueValues和false值是导致true或false语句的字符集 stack<bool> operandStack; for (int k = 0; k < postfix.size(); k++) { char ch = postfix[k]; if (ch != '!' && ch != '&' && ch != '|') { if (trueV
stack<bool> operandStack;
for (int k = 0; k < postfix.size(); k++)
{
char ch = postfix[k];
if (ch != '!' && ch != '&' && ch != '|')
{
if (trueValues.contains(ch))
{
operandStack.push(true);
}
if (falseValues.contains(ch))
{
operandStack.push(false);
}
}
else if (ch == '!' || ch == '&' || ch == '|')
{
bool operand2 = operandStack.top();
operandStack.pop();
bool operand1 = operandStack.top();
operandStack.pop();
switch(ch)
{
case '!':
operandStack.push(operand1 != operand2);
case '&':
operandStack.push(operand1 && operand2);
case '|':
operandStack.push(operand1 || operand2);
}
}
}
result = operandStack.top();
栈操作数栈;
对于(int k=0;k
注释掉result=
行将删除错误消息 首先,我看到你的“if(ch==”!“| | ch==”&“| | ch==”|”)没有任何意义。他们没有别的可能
另外,如果“postfix”是std::string,我很确定size包含一个终止的空字符。所以它可能是想在那里放点东西
第三,如果这整件事都在一个函数内部,并且您正在按照您的建议返回一个引用(我没有看到实际的函数原型),那么您正在尝试返回一个对即将被销毁的局部堆栈变量的引用
而且,正如Spinkoo所指出的,你的开关也没有断开 我知道出了什么问题。与此处提供的代码无关。我在设置输入函数的字符串的格式时出错。很抱歉,谢谢大家的帮助。如果堆栈为空,它将崩溃,并且有时会发生这种情况。您可以显示trueValues和falseValues初始化吗?对于我现在正在处理的测试用例,我已确保堆栈不是空的。trueValues和falseValues是双链接列表。我检查字符串中的字母是否在这两个集合中,并将true或false推到操作数堆栈上。@AshBal是缺少的
break代码>语句,并且您真的希望在传输到特定的案例
值标签后,完成并执行所有语句吗?