我构建了一个自定义异常,用于在我正在从事的学校项目中捕获不同的错误。
class WrongValueException : public std::runtime_error
{
public:
WrongValueException(std::string mess): std::runtime_error(mess) {};
};
问题是当我在下面的 switch 语句的默认子句中使用 "throw WrongValueException("Error: Syntax"); 时。
Expression* SubExpression::parse()
{
Expression* left;
Expression* right;
char operation, paren;
left = Operand::parse();
cin >> operation;
right = Operand::parse();
cin >> paren;
switch (operation)
{
case '+':
return new Plus(left, right);
case '-':
return new Minus(left, right);
case '*':
return new Times(left, right);
case '/':
return new Divide(left, right);
default:
throw WrongValueException("Error: Syntax - " + operation);
}
return 0;
}
基本上,传递给 swtich 语句的字符应该是 swtich 语句中列出的运算符之一,如果不是我想抛出异常。当抛出异常时,我得到的只是一个字符,该字符根据输入中给出的字符而变化。
我在主函数中发现了错误。
输入输出示例如下:
Enter expression: (5^x),x=2;
#
Press any key to continue . . .
Enter expression: (5&x),x=2;
T
Press any key to continue . . .
“按任意键继续...”上方的单个字符是操作员更改时更改的内容。我已经成功地为我在程序中进行的一些其他检查实现了这个错误捕获,并且抛出冒泡到主要的 try/catch 子句没有问题。这是唯一的一个。