2017-03-25 98 views
-2

最後更新:感謝您的所有意見和幫助。我回到教科書並複製整個代碼來運行他們的程序,並且意識到他們的投擲消息從未出現過,我假設那裏會出現消息,這就是爲什麼我期待在我的程序中出現一條消息,這就是爲什麼我沒有使用try/catch。再次感謝您幫助球員/女球員。扔不顯示錯誤信息C++

我正在進行作業,並且由於某種原因,throw invalid_argument不會顯示消息「帳戶餘額過低」。

我幾乎把代碼從我的課本

void setBaseSalary(double salary) { 
    if (salary<0.0){ 
    throw invalid_argument("Salary must be >= 0.0"); 
    } 
} 

,並創建了自己的....

void Account::setAccountBalance(double accountBalanceVar) 
{ 
    cout << accountBalanceVar << "B4 IF" << endl; 
    if (accountBalanceVar < 0.0) { 
     cout << accountBalanceVar << "B4 while in IF" << endl; 
     throw invalid_argument("Account balance is too low"); // program err  
     accountBalanceVar = 0.0; 
     cout << accountBalanceVar << "In IF" << endl; 
    } 
    accountBalance = accountBalanceVar; 
} 

的COUT是我調試該程序停止工作,從而導致了我到扔。

這裏是我完整的代碼複製錯誤,我使用-5我輸入

#include <iostream> 
#include <iomanip> 
#include "savingAccount.h" 
#include "checkingAccount.h" 
#include "Account.h" 

// header 

using namespace std; 

int main() { 

    double userAccountBalance{ 0.0 }; 

    cout << "Enter your account Balance: " << endl; 
    cin >> userAccountBalance; 

    Account myAccount{ userAccountBalance }; 

    return 0; 
} 

#include "Account.h" 
#include <iostream> 
#include <iomanip> 
#include <string> 
#include <stdexcept> 
#include <sstream> 

using namespace std; 



Account::Account(double accountBalanceVar) { 

    setAccountBalance(accountBalanceVar); 
    cout << accountBalance << ": Tester: constructor" << endl; 
} 

double Account::credit(double addBalance) 
{ 
    accountBalance+=addBalance; 

    return accountBalance; 
} 

double Account::debit(double withDrawnVar) 
{ 
    if (accountBalance < withDrawnVar) { 

     cout << "Error : You can not withdrawn more than your total balance"; 
     withDrawnVar = 0; // To ensure unchange 

} 
    accountBalance -= withDrawnVar; 

    return withDrawnVar; 
} 

Account::~Account() 
{ 
} 

void Account::setAccountBalance(double accountBalanceVar) 
{ 
    cout << accountBalanceVar << "B4 IF" << endl; 
    if (accountBalanceVar < 0.0) { 
     cout << accountBalanceVar << "B4 while in IF" << endl; 
     throw invalid_argument("Account balance must be >= 0.0"); 
     accountBalanceVar = 0.0; 
     cout << accountBalanceVar << "In IF" << endl; 
    } 
    accountBalance = accountBalanceVar; 

} 

double Account::getAccountBalance() 
{ 
    return accountBalance; 
} 


#include <iostream> 
#include <iomanip> 
#include <string> 

#ifndef ACCOUNT_H 
#define ACCOUNT_H 
class Account 
{ 
public: 
    Account(double = 0.0); 
    double credit(double); 
    double debit(double); 


    ~Account(); 


    void setAccountBalance(double); 
    double getAccountBalance(); 

private: 
    double accountBalance{ 0.0 }; 
    double zeroBalance{ 0.0 }; 

}; 

#endif 

更新:

,你看到什麼症狀?你使用什麼輸入? 輸入後的程序停止(使用-5作爲輸入) 「COUT < < accountBalanceVar < < 」B4,而在IF「 < < ENDL;」

該命令將顯示-5,扔將不顯示和程序停止。

我沒有使用try/catch,因爲教科書的例子沒有使用它,我很困惑爲什麼教科書版本的工作原理和我不會一樣..它幾乎是相同的。


+2

你必須提供更多細節。你是什​​麼意思「拋出invalid_argument不想工作」?你看到了什麼症狀?你使用什麼輸入?調用函數的代碼是什麼樣的? –

+1

在哪裏處理異常?你的「try ... catch」聲明在哪裏? –

+1

您是否希望在'throw'之後看到'cout'打印的文本?該計劃將永遠不會到達那裏。我們可以有一個[mcve],以便我們有足夠的信息提供良好的建議? – user4581301

回答

0

異常由try/catch語句處理。您需要添加一個才能捕獲異常並打印其值。

try { 
    Account myAccount{ -5.0 }; // Assuming this calls setAccountBalance 
} catch (const std::invalid_argument &e) { 
    std::cerr << "Exception: " << e.what() << std::endl; 
} 

如果您從未發現異常,則調用terminate函數。它會停止你的可執行文件。 C++不像Java,因爲未處理的異常不會被打印。如果您在Linux上運行並啓用了核心文件生成,那麼將生成核心文件。