编辑:将令牌结构/枚举添加到代码块
我是 C++ 新手,所以如果我错过了一些明显的东西,请原谅我。我正在尝试编写调车场算法的 c++ 版本,但它无法编译,因为它给了我错误:“无法从 'void' 转换为 'Token'(在我标记的行上)。” 谁能告诉我为什么会出现这个错误?
typedef enum TokenType { None, Number, Operator, LeftParens, RightParens };
struct Token
{
enum TokenType type;
union
{
int num;
char op;
};
};
list<Token> DoShuntingYard(list<Token> tokenList)
{
stack<Token> opStack;
list<Token> output;
while (!tokenList.empty())
{
****(This Line) Token t = tokenList.pop_front();
switch (t.type)
{
case Number:
output.push_back(t);
break;
case Operator:
if (!opStack.empty())
{
Token op2 = opStack.top();
if ((IsLeftAssoc(t) && GetOpPrecedence(t) <= GetOpPrecedence(op2)) || (!IsLeftAssoc(t) && GetOpPrecedence(t) < GetOpPrecedence(op2)))
{
output.push_back(opStack.pop());
}
}
break;
}
}
}