C++ 在开关的default子句中引发自定义异常将生成单个字符
我有一个自定义的异常,我正在使用它捕获我正在处理的整个学校项目中的不同错误C++ 在开关的default子句中引发自定义异常将生成单个字符,c++,C++,我有一个自定义的异常,我正在使用它捕获我正在处理的整个学校项目中的不同错误 class WrongValueException : public std::runtime_error { public: WrongValueException(std::string mess): std::runtime_error(mess) {}; }; 问题是我在下面switch语句的default子句中使用了“throw-errowalueexception”(“Error:Syntax”);
class WrongValueException : public std::runtime_error
{
public:
WrongValueException(std::string mess): std::runtime_error(mess) {};
};
问题是我在下面switch语句的default子句中使用了“throw-errowalueexception”(“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语句中列出的运算符之一,如果不是,我想抛出异常。当抛出异常时,我得到的只是一个字符,它会根据输入中给定的字符进行更改
我捕获了main函数中的错误
输入和输出的示例包括:
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子句中,没有问题。这是唯一的一个。您不应该将+与字符串文字一起使用。它的行为与您的想法不同。你应该先对字符串进行转换
throw WrongValueException(std::string("Error: Syntax - ") + operation);
否则,传递的字符地址的偏移量等于操作的数值<代码>“Hello”+1
是指向'e'
的指针。在你的例子中,你越界了,你基本上有了未定义的行为。在错误:语法-“+操作
中,你将字符
添加到常量字符*
。这将执行指针添加而不是字符串连接,因为不涉及std::string
首先将其中一个操作数强制转换为string
:
std::string("Error: Syntax - ") + operation
我将返回到我的其他异常并更正此错误。非常感谢。