捕获命名空间限定的异常

时间:2015-08-24 16:03:02

标签: c++ exception namespaces try-catch

我有一个像这样的例外:

namespace Splat {
    class MyException : public std::exception

在我的代码中,我这样抓住它:

} catch (MyException &e) {
    ....
} catch (...) {
    ....

我明确声明异常的第一个catch块无法捕获异常,并且它被捕获在第二个...通配符块中。

当我尝试使用其名称空间Splat(即

)限定异常声明时
} catch (Splat::MyException &e) {

我收到错误:

MyCode.cpp:123: error: expected type-specifier
MyCode.cpp:123: error: expected unqualified-id before ‘&’ token
MyCode.cpp:123: error: expected ‘)’ before ‘&’ token
MyCode.cpp:123 error: expected ‘{’ before ‘&’ token
MyCode.cpp:123: error: ‘e’ was not declared in this scope

在我看来,第二种方法是正确的,因为我还没有使用Splat明确加入using namespace Splat;我的命名空间。

我所评论的各种示例表明,在catch语句中包含名称空间限定符非常合适......

1 个答案:

答案 0 :(得分:2)

我明确声明异常的第一个catch块无法捕获异常,它被捕获在第二个...通配符块中。

这告诉我MyException与Splat :: MyException不一样!

MyCode.cpp:123:错误:预期的类型说明符

这告诉我Splat :: MyException不是一个类型,因此要么使用宏MyException,要么MyException是声明的标识符(隐藏Splat :: Exception)。

另一个可能性是使用宏Splat或Splat是声明的标识符(隐藏名称空间Splat,不知道这是否可行)。