被警告,我不太了解throw是如何工作的。现在,我有一个方法可以检查一个变量是否大于或等于另一个变量,如果不是,则抛出字符串异常。
问题是我不知道抛出异常后如何退出该方法,而不会出现未处理的异常错误。
CircleSquare Square::operator+ (const Circle& op2)
{
/// Variables
CircleSquare ret;
/// Sets the temporary Square object's characteristics to LHS's colour, the sum of LHS sideLength + RHS sideLength, and Square name
ret.SetName((char *)"Square-Circle");
ret.SetColour((char *)this->GetColour());
if (sideLength >= (op2.GetRadius() * 2))
{
ret.SetSideLength(sideLength);
}
else
{
throw ("The sideLength of square is smaller than the diameter of the contained circle.");
return ret; // <--- Here is where the error occurs
}
if ((op2.GetRadius() * 2) <= sideLength && op2.GetRadius() >= 0.0)
{
ret.SetRadius(op2.GetRadius());
}
else
{
throw ("The radius of contained circle is larger than the sideLength of the square.");
return ret;
}
return ret;
}
我想要做的是抛出异常,然后退出该方法并在try-catch块中处理该异常,但是相反,它在{{1处带有“未处理的异常” }}
如何退出该方法而又不会出现错误?
答案 0 :(得分:0)
您需要catch
throw
在做什么。此外,return
时,throw
语句永远不会发生。 (您应删除以下行:
return ret; // <--- Here is where the error occurs
您很有可能会看到关于此的编译器警告(那是永远不会执行的代码)。您的代码应毫无警告地进行编译。总是。 (-Werror
编译标志对此非常有用。)
throw
的意思是:返回但不是正常方式
您需要执行以下操作:
try {
Square a;
Circle b;
CircleSquare sum= a + b; // You try to sum
// If you can, the return statement will give a value to sum
// If you throw, sum will not get constructed,
// b and a will be destroyed and the catch
// will be executed instead of anything below
// the call to operator+
std::cout << "Sum is: " << sum << std::endl;
} catch (std::string s) {
// Will only catch exceptions of type std::string
std::cerr << "Error: " << s << std::endl;
}
如果您对goto
块执行了catch
,但是却清理了所有内容,这就像“喜欢”。
如果不处理它,它将仍然异常终止每个函数,直到找到正确类型的catch
块或退出main
。