为什么我不能抓住我的例外?

时间:2015-12-17 10:45:59

标签: c++ exception

我有以下函数捕获ComObject的系统异常并抛出我自己的异常:

int TReader::ExecSQL(...) {
  try {
    // ...
  } catch (Comobj::EOleException& e) {
    throw myDBError("TReader::Open", "TReader", e.Message);
  }
// ...   
}

我无法抓住自己的异常,总是得到#34;异常未知!"!为什么呢?

void main() {
  try {
    ExecSQL(...);
  } catch(myDBError& e) {
    log(e.Message);
  } catch(...) {
    log("Exception unknown!");
  }
}

2 个答案:

答案 0 :(得分:7)

改为使用catch(const myDBError& e) {

匿名临时无法绑定到非const引用,因此不会在当前捕获站点拦截throw

答案 1 :(得分:-1)

如果try-catch块生成的不是Comobj::EOleException,而是生成其他内容,则可能会出现问题。 同时检查,也许myDBError构造函数生成另一个异常,另一种类型:-) 这将是最有趣的解释,为什么你不能抓住myDBError,但仍然抓住了一些东西: - )