int mult (int a, int b)
{
if (a <= 0 || b <= 0) throw (" Your input is invalid. No zero");
int doub = a * b;
if (doub <= 0) throw (" Invalid value");
cout << "\\n" << doub;
return doub;
}
//code that gives values of num1 & num2//
try
{
mult(num1, num2);
}
catch (int error)
{
cerr << " Error #@#$% invalid value";
}
如果两个值(num1,numa2)都大于0,则程序运行正常,但是,如果任何值小于0,则程序将失败,并且不会引发所需的消息。它只是显示默认错误。
使用前后条件是否不正确?
是投掷用法吗? (我对如何使用它有一些疑问,也许是这样,但我不知道)
答案 0 :(得分:3)
throw (" Your input is invalid. No zero");
您正在抛出char *
catch (int error)
,但是您正在抓到int
。这是与char *
不同的类型,因此不会捕获异常并将其传播到默认处理程序。
处理此问题的惯用方法是throw (std::runtime_error("Your input is invalid. No zero"));
,
和catch (std::exception & e) { cerr << e.what(); }
答案 1 :(得分:1)
您将引发类型为const char *
的异常,但会将其捕获为类型为int
的异常。要解决此问题,您需要做的就是更改:
catch (int error)
收件人:
catch (const char * error)
或者,如QuestionC所说,您可以扔std::runtime_error
并抓住它。