2015-07-13 29 views
-1

我正在嘗試製作用戶類的指針,並將其指定給教師或工作人員的地址。我一直試圖解決這個錯誤很長一段時間,我不能;如何在Visual Studio中處理「First Chance Exception」?

int userType; 
User *U=NULL; 
string ID, password; 
cout << "Please select user type for login -> 1 : Teacher, 2 : Staff : "; 
cin >> userType; 
cout << endl << "Please key in your ID : "; 
cin >> ID; 
cout << endl << "Please key in your password : "; 
cin >> password; 
if (userType == 1){ 
    U = new Teacher(); 
    try{ 
     U->Login(ID, password); 
    } 
    catch (std::ifstream::failure e){ 
     cerr << "Exception opening file" << endl; 
    } 
} 
else if (userType == 2){ 

    U = new Staff(); 
    try{ 
     U->Login(ID, password); 
    } 
    catch (std::ifstream::failure e){ 
     cerr << "Exception opening file" << endl; 
    } 
} 
+1

哪個異常和哪裏? – Simon

+0

輸入密碼 –

+1

@MohammedShafras後發生異常,提供最小代碼來重現錯誤。 –

回答

0

時拋出一個異常,不一定,如果它沒有被捕獲時顯示的第一個機會異常消息;因此如果你正在捕捉它(或者圖書館),你通常可以忽略它。

如果您的代碼和應用程​​序出現意外情況,那麼您可以打破「第一次機會異常」並調試它爲何首先被拋出。


作爲代碼示例的說明;

  • 一般的建議是,異常通常是由值引發,並通過引用捕獲。

    catch (std::ifstream::failure e) { 
    

    應該

    catch (std::ifstream::failure& e) { 
    
  • 你可以/應該添加一個常規catch一切,這可能有助於調試。因此,添加

    catch (std::exception& e) { 
        // ... e.what() 
    } 
    catch (...) { 
        // ... 
    } 
    
  • 鑑於代碼U->Login(ID, password);的背景下這是否使用流在某一時刻(啓用和流例外),如果沒有,受涼流錯誤可能不會反正工作。

+0

我已將catch block參數更改爲「exception e」,我遇到同樣的錯誤 –

+0

@MohammedShafras,您已包含必要的標題? –

+0

我可以知道我需要包含哪些標題嗎? –

相關問題