#c
#c
Вопрос:
Прежде всего я хотел бы извиниться за объем кода, который я сбрасываю. Я пишу некоторый код, который позволяет пользователю снимать и вносить деньги на счет, код также вычисляет процентную ставку по счету и количество снятий и депозитов и т.д. Я получаю сообщение об ошибке, когда пытаюсь вызвать функции базового класса для дочерних функций: «нет подходящего конструктора». Кажется, я не могу самостоятельно найти проблему с конструкторами. Кто-нибудь может помочь?
Account.cpp
#include "Account.h"
#include <iostream>
#include <iomanip>
using namespace std;
//overloaded constructor
Account::Account(double accBal, double annIntRate){
accBal = accBal;
annIntRate = annIntRate;
};
//deposit base class function
int Account::deposit(double accBal, int numWithdrawal)
{
cout << "Enter deposit: "<< endl;
double depos;
cin >> depos;
accBal = depos;
numDepos ;
return accBal;
}
//withdraw base class function
void Account::withdraw(double accBal, int numWithdrawal)
{
double amount;
cin >> amount;
accBal -= amount;
numWithdrawal ;
}
//interest rate calculation
void Account::calcInt(double accBal, double annIntRate)
{
double monthlyIntRate = annIntRate/2;
double monthlyInt = accBal * monthlyIntRate;
accBal = monthlyInt;
}
Account.h
#ifndef ACCOUNT_H
#define ACCOUNT_H
class Account
{
//variable declarations
private:
int accNum;
double accBal;
int numWithdrawal;
int numDepos;
double annIntRate;
double monthServCharg;
public:
Account(double, double); //overloaded constructor
virtual int deposit(double, int); //base class deposit declaration
virtual void withdraw(double, int); //base class withdraw declaration
virtual void calcInt(double, double); //updates interest rate
void setAccNum(int); //setter
int getAccNum(){return accNum;} //getter
void setAccBal(double);//setter
double getAccBal(){return accBal;}//getter
void setNumWithdrawal(int);//setter
int getNumWithdrawal(){return numWithdrawal;}//getter
void setNumDep(int);//setter
int getNumDep(){return numDepos;}//getter
void setAnnIntRate(double);//setter
double getAnnIntRate(){return annIntRate;}//getter
void setMonthServCharg(double); //setter
double getMonthServCharg(){return monthServCharg;}//getter
};
#endif
SavingsAccount.cpp
#include "SavingsAcc.h"
#include "Account.h"
#include <iostream>
using namespace std;
//status constructor
SavingsAccount::SavingsAccount(bool status)
{
status = false;
}
//deposit money function
void SavingsAccount::deposit(bool status, double accBal, int numDepos)
{
Account obj;
obj.deposit(accBal); //PROBLEM
if (accBal > 25.00)
status = true;
else
status = false;
}
//withdraw money child function, updates account status, service charges, interest rate etc
void SavingsAccount::withdraw(double accBal, int numWithdrawal, double annIntRate, double monthServCharg)
{
double amount;
if (accBal <= 25.00)
cout << "Balance too low, withdrawals cannot be made at this time"<<endl;
else
{
do
{
Account obj;
obj.withdraw(numWithdrawal); // PROBLEM
if (numWithdrawal > 4)
monthServCharg = 1;
if (accBal < 25.00)
{annIntRate = 0.01;}
}
while (amount > accBal);
cout << "Insufficient funds!";
}
}
//outputs the report of account
void SavingsAccount::accountReport(int accNum, bool status, int numWithdrawal, int numDepos, double monthServeCharg, double accBal)
{
cout << "====ACCOUNT STATUS===="<<endl;
cout << "Account number: "<< accNum <<endl;
if (status == true) //status
cout << "Satus: Active" << endl;
else
cout <<"Status: Inactive" << endl;
cout << "Total deposits: "<< numDepos << endl;
cout << "Total withdrawals" << numWithdrawal << endl;
cout << "Service charges: "<< monthServeCharg << endl;
cout << "Balance: "<<accBal<<endl;
}
SavingsAccount.h
#ifndef SAVINGSACC_H
#define SAVINGSACC_H
#include <iostream>
class SavingsAccount: public Account
{
private:
bool status; //status variable
public:
SavingsAccount(bool); // constuctor
void deposit(bool, double, int); // deposit function
void withdraw(double, int, double, double); //withdraw function
void accountReport(int, bool, int, int, double, double ); // full report of account
};
#endif
Комментарии:
1. пожалуйста, покажите место, где компилятор выдает вам ошибку/
Ответ №1:
Конструктор
Account(double, double); //overloaded constructor
на самом деле не перегружает конструктор, а делает недействительным конструктор по умолчанию.
Чтобы использовать этот конструктор, передавая значения для аргументов при построении SavingsAccount
типа
SavingsAccount::SavingsAccount(bool status) : Account(42, 334)
{
status = false;
}
.
Также строка
obj.deposit(accBal); //PROBLEM
вызывает ошибку, потому что учетная запись класса не имеет функции deposit, которая принимает только один аргумент. Вы должны удалить строку или передать нужное количество аргументов, чтобы устранить эту ошибку.