我有一个像这样的例外:
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
语句中包含名称空间限定符非常合适......
答案 0 :(得分:2)
我明确声明异常的第一个catch块无法捕获异常,它被捕获在第二个...通配符块中。
这告诉我MyException与Splat :: MyException不一样!
MyCode.cpp:123:错误:预期的类型说明符
这告诉我Splat :: MyException不是一个类型,因此要么使用宏MyException,要么MyException是声明的标识符(隐藏Splat :: Exception)。
另一个可能性是使用宏Splat或Splat是声明的标识符(隐藏名称空间Splat,不知道这是否可行)。