捕获命名空间限定的异常

catch exception qualified by namespace

我有一个这样定义的异常:

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

在我看来,第二种方法是正确的,因为我没有使用 using namespace Splat;.

明确地将 Splat 加入到我的命名空间中

我查看的各种示例表明,在您的 catch 语句中包含名称空间限定符是完全没问题的...

我显式声明异常的第一个 catch 块未能捕获异常,它在第二个 ... 通配符块中被捕获。

这告诉我 MyException 与 Splat::MyException 不同!

MyCode.cpp:123: 错误:需要类型说明符

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

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