捕获预定义的int异常

时间:2012-05-16 08:56:48

标签: c++

我已经定义了一个简单的int错误代码:

#define my_error 20

在我的代码中某处我抛出了这个错误:

throw my_error;

现在我想尝试捕获抛出的这个异常:

try
{
    ...
    ...
}
catch (my_error)
{
    cout << "Error: my error";
}

不幸的是编译器不赞成这个:

  • 语法错误:'常数'
  • catch处理程序必须指定一种类型
  • '尝试'在第34行开始阻止没有捕获处理程序

有办法做到这一点吗?

感谢。

2 个答案:

答案 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