在我期望它們被捕獲的情況下,異常沒有被捕獲。該代碼在1 cpp文件中的1個函數中,該文件通過GCC 4.2編譯爲靜態庫,然後鏈接到Cocoa應用程序中。有問題的代碼是C++派生類異常沒有被基類捕獲
class runtime_error : public exception{
// More code
};
int foo(void){
try {
if(x == 0){
throw std::runtime_error("x is 0");
}
}
catch(std::exception & e){
// I expect the exception to be caught here
}
catch(...){
// But the exception is caught here
}
}
我可以修改代碼以
int foo(void){
try {
if(x == 0){
throw std::runtime_error("x is 0");
}
}
catch(std::runtime_error & e){
// exception is now caught here
}
catch(…){
}
}
代碼的第二個版本只解決了可能從性病導出爲runtime_error例外,而不是其他異常類問題::例外。任何想法有什麼不對? 請注意,代碼的第一個版本在Visual Studio中可以正常工作。
感謝,
巴里
當你已經存在一個定義自己的'runtime_error'類的時候,是否有任何理由? – templatetypedef 2012-02-13 17:53:19
應該發現異常。 http://ideone.com/dl0Dm更新您的GCC並查看錯誤是否仍然發生 – Kos 2012-02-13 17:55:07
您向我們顯示的代碼未編譯。請提供一個簡短的,完整的完整示例。 http://sscce.org – 2012-02-13 17:58:23