捕获命名空间限定的异常
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 ,不知道这是否可能)。
我有一个这样定义的异常:
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 ,不知道这是否可能)。