我已经定义了一个简单的int错误代码:
#define my_error 20
在我的代码中某处我抛出了这个错误:
throw my_error;
现在我想尝试捕获抛出的这个异常:
try
{
...
...
}
catch (my_error)
{
cout << "Error: my error";
}
不幸的是编译器不赞成这个:
有办法做到这一点吗?
感谢。
答案 0 :(得分:8)
20
不是一种类型,因此您无法捕获它。您可以做的是过滤catch
块中的值:
catch (int exception)
{
if ( exception == 20 )
cout << "Error: my error";
}
更好的方法是定义自己的例外:
class MyException : public std::exception
{
}
//...
try
{
throw MyException();
}
catch(MyException& ex)
{
}
答案 1 :(得分:2)
如果您使用C ++ 11,则可以使用decltype(my_error)
,以防您更改my_error
的类型。
try {
// ...
} catch (const decltype(my_error)& e) {
// ...
}
这是demo。