ошибка инициализации базового класса, нет подходящего конструктора

#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, которая принимает только один аргумент. Вы должны удалить строку или передать нужное количество аргументов, чтобы устранить эту ошибку.