I have four files in c++

  1. BankAccount.h
  2. BankDatabase.h
  3. Main.cpp

BankAccount.h

#include <string>

class BankAccount
{
    public:
        BankAccount(int accNumber,const std::string& accName);

        void setAccNumber(const int accNumber);
        int getAccNumber() const;

        void setAccName(const std::string& clientName);
        std::string getAccName() const ;

    protected:
        int mAccNumber;
        std::string mAccName;

};

BankAccount::BankAccount(const int accNumber,
        const std::string& accName):mAccNumber(accNumber),mAccName(accName){}


void BankAccount::setAccNumber(const int accNumber)
{
   mAccNumber = accNumber;     
}

void BankAccount::setAccName(const std::string& accName)
{
    mAccName = accName;
}

int BankAccount::getAccNumber() const 
{
    return mAccNumber;
}

std::string BankAccount::getAccName() const {
    return mAccName;
}

// BankDatabase.h

#include <map>
#include <iostream>
#include <stdexcept>
#include "BankAccount.h"


class BankDatabase
{
    public:
        BankDatabase();

        void addAccount(const BankAccount& acc);
        void deleteAccount(int accNumber);

        BankAccount& findAccount(int accNumber) 
            throw (std::out_of_range);

        BankAccount& findAccount(std::string& accName) 
            throw (std::out_of_range);


        void mergeDatabase(BankDatabase& db);

    protected:
        std::map<int,BankAccount> mAccounts;

};


BankDatabase::BankDatabase(){}

void BankDatabase::addAccount(const BankAccount& acc)
{
    std::pair<std::map<int,BankAccount>::iterator,bool> res =  
        mAccounts.insert(std::make_pair(acc.getAccNumber(),acc));

    if(!res.second)
        std::cout << "Account cannot be  added ";
}

void  BankDatabase::deleteAccount(int accNumber) 
{
    if( mAccounts.count(accNumber))
        mAccounts.erase(accNumber);
}

BankAccount& BankDatabase::findAccount(int accNumber)
    throw(std::out_of_range)
{
    auto iter =  mAccounts.find(accNumber);

    if(iter != mAccounts.end())
        return iter->second;
    throw std::out_of_range("No account number with this name ");

}

BankAccount& BankDatabase::findAccount(std::string& accName) 
    throw(std::out_of_range)
{
    for(auto& p : mAccounts) {
        if ( p.second.getAccName() == accName )
            return p.second;
    }
    throw std::out_of_range(" No account with this name ");
}

// Main.cpp

#include <iostream>
#include "BankDatabase.h"


int main()
{
    BankDatabase db;
    db.addAccount(BankAccount(1,"james"));
    db.addAccount(BankAccount(2,"johnson"));
    db.addAccount(BankAccount(3,"kamal"));
    db.addAccount(BankAccount(4,"appu"));

    // find account name based on account number

    std::cout << db.findAccount(1).getAccName();

    // find account number based on account name

    std::cout << db.findAccount("james");

    // delete an account

    db.deleteAccount(db.findAccount("james").getAccNumber());

    // find the account

    std::cout << db.findAccount("james");

    //Merge database

    db.mergeDatabase(db);

    return 0;
}

At this particular statment " std::cout << db.findAccount("james"); " , i got an error

error: invalid conversion from ‘const char*’ to ‘int’

But i defined findAccount(int) and findAccount(string) in BankDatabase.h

Can someone help in this issue.

Edited 1 Year Ago by pritaeas: Moved.

Did you see the other post with fixes/edits to your code ?
Please mark that (primary post) as 'solved' ... and in the future, please try to avoid 'duplicate posts' :)

Edited 1 Year Ago by David W

This question has already been answered. Start a new discussion instead.