Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++: Multiple definition error when including parent class?

I am writing a simple banking program with derived classes and I am running into a Multiple definition of <method name> error when including parent class.

Keep in mind that I just started coding in C++ yesterday, and moving over from Java/PHP, handling headers/definitions is a bit confusing for me. Please correct anything you see wrong!

Here is a sample of my files/code:

Files

  • Account.h
  • Account.cpp (Super)
  • ChequingAccount.cpp (Child)
  • SavingsAccount.cpp (Child)

The error is reproduce-able when including the parent class (Account.cpp) into any file. I have reduced my code by a lot, but it should give you an idea of how I am handling inheritance.

To clarify, when I #include the child classes to any file (ChequingAccount.cpp) works fine, and inherited functions work as expected. However, when I #include the parent class (Account.cpp) breaks the compiler with the Multiple definition of <method name> error for all methods.

Again, I am not sure if this is the proper way to do it, but this is what I understand from tutorials I have found.

Code

Account.h

#ifndef ACCOUNT_H
#define ACCOUNT_H

class Account
{
    protected:
        double m_balance;

    public:
        Account(double balance); // Constructor.
        virtual ~Account(); // Destructor.

        // Accessor Methods.
        double getBalance() const;

        // Mutator Methods.
        virtual void withdrawFunds(double amount);
        void depositFunds(double amount);
};

#endif

Account.cpp (Superclass)

#include "Account.h"

Account::Account(double balance = 0)
{
    m_balance = balance;
}

Account::~Account()
{
    // TODO: Delete this data structure...
}

double Account::getBalance() const
{
    return m_balance;
}

void Account::withdrawFunds(double amount)
{
    m_balance -= amount;
}

void Account::depositFunds(double amount)
{
    m_balance += amount;
}

ChequingAccount.cpp (Child)

#include "Account.h"

class ChequingAccount: public Account
{
    public:
        ChequingAccount(int id, int userId, double balance) : Account(id, balance){};

        void withdrawFunds(double amount)
        {
            // Override parent method.
        }
};

Any help would be greatly appreciated! Thank you!

like image 293
user3745117 Avatar asked May 12 '26 21:05

user3745117


1 Answers

When you #include "some file.cpp", you are directing the compiler to copy the contents of that cpp file to that point in the program. This will create two compiled versions of your "some file" which will lead to "Multiple Definitions."

like image 113
Will Avatar answered May 15 '26 09:05

Will



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!