throw 不显示错误消息 c++
throw does not show error msg c++
最后更新:感谢大家的评论和帮助。我回到教科书并将整个代码复制到 运行 他们的程序,并意识到他们的抛出消息从未出现过,我认为那里会出现消息,这就是为什么我期待一条消息出现在我的程序中,这就是为什么我没有使用 try/catch。再次感谢您的帮助 guys/gals.
我正在做作业,由于某些原因 throw invalid_argument
不会显示消息 "Account balance is too low"。
我几乎是从我的教科书上拿来的代码
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 while in IF" << endl; "
命令显示-5,throw不显示,程序停止
我没有使用 try/catch 因为教科书的示例没有使用它,我很困惑为什么教科书的版本有效而我的没有..几乎相同。
异常由 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 上 运行 并且启用了核心文件生成,那么将生成一个核心文件。
最后更新:感谢大家的评论和帮助。我回到教科书并将整个代码复制到 运行 他们的程序,并意识到他们的抛出消息从未出现过,我认为那里会出现消息,这就是为什么我期待一条消息出现在我的程序中,这就是为什么我没有使用 try/catch。再次感谢您的帮助 guys/gals.
我正在做作业,由于某些原因 throw invalid_argument
不会显示消息 "Account balance is too low"。
我几乎是从我的教科书上拿来的代码
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 while in IF" << endl; "
命令显示-5,throw不显示,程序停止
我没有使用 try/catch 因为教科书的示例没有使用它,我很困惑为什么教科书的版本有效而我的没有..几乎相同。
异常由 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 上 运行 并且启用了核心文件生成,那么将生成一个核心文件。