Search code examples
c++header-filesmultiple-definition-error

Multiple definition with 2 header files


I am using CodeBlocks.

In C++, I have 3 header files and 3 cpp files like below.

Base.h

class Base
{
public:
    virtual int funky(int x, int y);
};

Base.cpp

 int funky(int x, int y) {
  return x+y;
}

FirstClass.h

class FirstClass: public Base
{
public:
    virtual int funky(int x, int y);
};

FirstClass.cpp

int funky(int x, int y) {
  return x+y;
}

SecondClass.h

class SecondClass: public Base
{
public:
    virtual int funky(int x, int y);
};

SecondClass.cpp

int funky(int x, int y) {
  return x+y;
}

In this condition I take error of "multiple definition." But, I have to use these functions with the same names. I tried

int funky (int x, int y) override;
 

but it did not work.

I need all three function, because when I want to call them like below and if they are defined like above, I cannot reach them.

 vector<Base> BASE =  {FirstClass(), SecondClass()};
 BASE[1]->funky(1,2)

Do you have any suggestion? I am open to another approach to this problem. Thank you.


Solution

  • In the above code sample, you defining funky in two different cpp files but have declared in your class. So following should be the correct format:

    FirstClass.cpp

    int FirstClass::funky(int x, int y) {
      return x+y;
    }
    

    SecondClass.cpp

    int SecondClass::funky(int x, int y) {
      return x+y;
    }
    

    main.cpp

    FirstClass a;
    SecondClass b;
    
    cout<<a.funky(1,2)<<" "<<b.funky(3,4)<<endl;