2

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

#define my_error 20

在我的代码的某个地方,我抛出了这个错误:

throw my_error;

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

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

不幸的是,编译器不同意这一点:

  • 语法错误:'常量'
  • catch 处理程序必须指定一种类型
  • 从“34”行开始的“try”块没有捕获处理程序

有没有办法做到这一点?

4

2 回答 2

9

20不是类型,所以你无法捕捉到它。您可以做的是过滤catch块中的值:

catch (int exception)
{
    if ( exception == 20 )
        cout << "Error: my error";
}

更好的方法是定义自己的异常:

class MyException : public std::exception
{
}

//...

try
{
   throw MyException();
}
catch(MyException& ex)
{
}
于 2012-05-16T08:57:53.303 回答
4

如果您使用 C++11,则可以使用decltype(my_error),以防万一您更改my_error.

try {
  // ...
} catch (const decltype(my_error)& e) {
  // ...
}

这是一个演示

于 2012-05-16T11:02:39.207 回答