error C2713: Only one form of exception handling permitted per function

weixin_34391854發表於2011-08-17

error C2713: Only one form of exception handling permitted per function

錯誤的我的處理方式:(C++)

當我在一個函式中同時使用try-catch try-finally的巢狀使用時,會提示上面的錯誤,錯誤的意思大概是,不允許在一個函式中出現兩種異常的處理方式,我想是不是不能巢狀使用啊,於是我就在一個函式中同時使用這兩個,但是不巢狀使用了,錯誤依然是上面的。現在我沒辦法了,只能在不在一個函式中同時使用了,我就用了一種折中的方案,即把這兩種異常處理方式,分別在兩個函式中實現,然後讓另一個函式呼叫其中的一個函式。我們還可以讓一個異常處理中包含另一個能處理異常的函式。但是,我們要注意函式的呼叫次序,保證有異常發生時,我們的try-finally一定能執行到就行了

例如:

#include <iostream> 

 using namespace std; 

 class normal_pointer_example 

 { 

 public: 

     normal_pointer_example(){cout<<"建構函式執行!\n";} 

     ~normal_pointer_example(){cout<<"解構函式執行!\n";} 

}; 

 class normal_pointer_wrong{};//normal_pointer_wrong異常 

 bool quit; 

 void quit_func() 

 { 

     if(quit==true) 

         cout<<"呼叫quit_func函式!\n"; 

     throw normal_pointer_wrong(); 


 normal_pointer_example *Npointer=new normal_pointer_example;
 void f()
 {
  __try
  {
  }
  __finally
  {
  delete Npointer; 
  }
 }
 int main() 

 { 


     try

    { 

       

        quit=true; 

        quit_func(); 

         delete Npointer;  //有異常出現時,這句話不在執行

     } 

    catch (normal_pointer_wrong) 

     { 
  bool exceFlag=true;
        cout<<"輸出normal_pointer_wrong異常!!\n";
  if(exceFlag)
   f();

  } 


    return 0; 

 }

 總之:只要保證所有的函式內只有一個異常處理,函式就不會報上述錯誤。

相關文章