【发布时间】:2015-08-24 16:03:02
【问题描述】:
我有一个这样定义的异常:
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 语句中包含命名空间限定符非常好......
【问题讨论】:
-
完全没问题。您是否忘记包含必要的标题?此外,第一件事不应该编译,除非它选择了一些不同的类型,称为
MyException- 有这样的事情吗?归根结底,我们需要更多信息。 -
[OT]:我想你可以通过
const参考来了解。 -
发布MCVE。
-
@robert 那么恐怕不是 M。隔离问题是一项基本的编程技能。您需要继续扔掉不会导致错误消失的东西,或者从头开始并继续添加东西直到出现错误。很多时候,这个过程本身会给你解决方案(因为它会在问题出现/消失时查明确切的变化)。
-
是的,你可以捕捉到
std::exception就好了,你自己的命名空间也不例外。你的错误在别处。
标签: c++ exception namespaces try-catch