我定义了一个简单的整数错误代码:
#define my_error 20
在我的代码中的某个地方,我抛出了这个错误:
throw my_error;
现在我想尝试捕获引发的异常:
try
{
...
...
}
catch (my_error)
{
cout << "Error: my error";
}
不幸的是,编译器不批准这一点:
- 语法错误:"常量"
- 捕获处理程序必须指定一种类型
- 从第 "34" 行开始的"try"块没有捕获处理程序
有没有办法做到这一点?
20
不是一个类型,所以你无法捕捉它。您可以做的是过滤catch
块中的值:
catch (int exception)
{
if ( exception == 20 )
cout << "Error: my error";
}
更好的方法是定义自己的异常:
class MyException : public std::exception
{
}
//...
try
{
throw MyException();
}
catch(MyException& ex)
{
}
如果您使用
C++11,则可以使用 decltype(my_error)
,以防万一您更改my_error
的类型。
try {
// ...
} catch (const decltype(my_error)& e) {
// ...
}
这是一个演示。