最後更新:感謝您的所有意見和幫助。我回到教科書並複製整個代碼來運行他們的程序,並且意識到他們的投擲消息從未出現過,我假設那裏會出現消息,這就是爲什麼我期待在我的程序中出現一條消息,這就是爲什麼我沒有使用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,因爲教科書的例子沒有使用它,我很困惑爲什麼教科書版本的工作原理和我不會一樣..它幾乎是相同的。
你必須提供更多細節。你是什麼意思「拋出invalid_argument不想工作」?你看到了什麼症狀?你使用什麼輸入?調用函數的代碼是什麼樣的? –
在哪裏處理異常?你的「try ... catch」聲明在哪裏? –
您是否希望在'throw'之後看到'cout'打印的文本?該計劃將永遠不會到達那裏。我們可以有一個[mcve],以便我們有足夠的信息提供良好的建議? – user4581301