在C ++中引发和捕获自定义异常的问题
|
我创建了Someting类,该类在无法实例化时抛出异常SomethingException(SomethingException继承自std :: exception)。问题是我无法捕获SomethingException这样的东西(我必须做一个肮脏的技巧才能捕获它)。
程序中有执行的地方:
这不起作用,没有捕获异常,程序崩溃了。
try{
Something* s = new Something();
}
catch (SomethingException* e){
std::cerr<<e.what();
}
相比之下,这确实有效(捕获了异常并显示了正确的消息),但我确实有这样的感觉,我不应该这样做
try{
Something* s = new Something();
}
catch (std::exception* e){
SomethingException* e2 = (SomethingException*) e;
std::cerr<<e.what();
}
因为指针是强制类型转换的,所以我只能在且仅当抛出一种类型的异常时才能使此项工作。我需要捕捉各种类型的那一刻将无法正常工作。
有没有办法以更正确的方式捕获自定义异常?
编辑:
引发异常如下
//...
throw new SomethingException (\"Errormessage\"); //Custom exception constructor
//...
Something :: Something()的声明是
Something::Something() throw(...)
使用声明
Something::Something() throw(SomethingException)
//or
Something::Something() throw(SomethingException*)
引发很多警告(警告C4290)
没有找到相关结果
已邀请:
3 个回复
剿畦缄饥小
如果要以
抛出异常,则只能以
捕获异常。您的问题中没有足够的信息可以说明,但问题可能出在
是如何从
衍生而来的。验证或将其更改为继承自例如“ 10”或“ 11”。 另外,请勿使用
指示符。只是不要。没有编译器可以提供使用检查异常的任何好处:实际上,不检查检查异常,除非在异常不符合说明符的情况下严重失败(抛出
)。这可能就是您的代码中正在发生的事情。
珊畴炮贩号
痰降锭骂奸