我正在使用第三方库,例如。 Lib::ValueType value
。然后我调用成员函数value.theta()
,该函数执行一些数学运算,包括从atan2
调用<cmath>
。有时theta
组件为空,并抛出“atan2:domain error”。但是,即使将try{}catch(...)
包裹在可疑代码周围,我也无法捕获异常。
我正在使用C ++ Builder 2009,想知道如何抛出异常并且没有被IDE或我的代码捕获。错误会直接弹出到屏幕上作为对话框。我已选择IDE中的所有选项来处理每种类型的异常。
答案 0 :(得分:1)
C标准库不了解C ++异常处理,因此try-catch
不起作用。您可能希望查看matherr函数 - 根据文档,您可以在程序中重新定义此函数,以便自己处理数学异常。
答案 1 :(得分:0)
不幸的是,C数学库不了解C ++异常。您很可能从硬件中看到未处理的浮点异常。 atan2
对其输入非常宽容:唯一无效的情况是(0,0)所以你所要做的就是在进行函数调用之前验证一个参数是非零的,以防止异常。
编辑:然后你需要在调用函数时阻止无效的theta组件。第三方图书馆文档在调用theta
时有效说什么?
答案 2 :(得分:0)
atan2函数不应该为参数(0,0)抛出异常。请参阅Charles Petzold的讨论:http://www.charlespetzold.com/blog/2008/09/180741.html。所以看起来C ++ Builder的标准库是错误的。