2011-12-25 53 views
1

我正在调用一个函数,我在该函数中抛出一个异常。但我不想在同一个函数中捕捉到它,但想要捕捉它在函数被调用的位置,就像这里是我的示例代码。在C++中的异常机制问题

void foo()throw(...){ 
    std::cout << "FOO" <<std::endl; 
    throw "Found"; 
} 
void main(){ 
    try{ 
     foo(); 
    } 
    catch(...){ 
    std::cout << "exception catched" <<std::endl; 
    } 
} 

但它崩溃的地方,我在foo函数中抛出异常,但我想在主函数中捕捉它。

我该怎么做?

回答

2
throw; 

throw没有操作数会重新抛出当前正在处理的异常。这意味着它只能用于catch区块。由于执行throw;时,您不在catch块中,程序将终止。

你需要抛出东西,就像运行时错误:throw std::runtime_error("oops");


还要注意的是异常规格(例如,在void foo() throw(...)throw(...))不应该被使用。对于一个解释,为什么,看到"A Pragmatic Look at Exception Specifications."

+0

其实我被扔例外像扔“找到......”。我忘了写信。 –

+0

那么,如果你不告诉我们你的问题是什么,那么我们无法帮助你解决问题。如果您在问题的[新]代码的顶部添加'#include ',并使用Visual C++ 2010 SP1进行编译,则会发现它编译并运行时没有错误。 –