Rog Matthews
Rog Matthews

Reputation: 3247

Error While Creating Header Files in C++

There is one header a file Rectangle.hxx

#ifndef Rectangle_included
#define Rectangle_included
#include <iostream>
#include <math.h>
#include "GetL.hxx"
using namespace std;

class Rectangle: public GetL
{
int width;
int value;
public:
Rectangle();
Rectangle(int v, int w);
Rectangle(const Rectangle& b);
int getWidth();
int getValue();
Rectangle & plus(int newval);
};
#endif //Rectangle_included

The file GetL.hxx is defined like this:

#ifndef GetL_included
#define GetL_included
#include <iostream>
using namespace std;
class GetL
{
public:
virtual int getWidth();
};
#endif //GetL_include

The file Rectangle.cxx contains various definitions:

#include <iostream>
#include <math.h>
#include "Rectangle.hxx"
using namespace std;

Rectangle::Rectangle()
{
 value=0;
 width=0;
}
Rectangle::Rectangle(int v, int w)
{
 value=v;
 width=w;
}
Rectangle::Rectangle(const Rectangle& b)
{
 value= b.value;
 width= b.width;
}
int Rectangle::getWidth()
{
 return width;
}
int Rectangle::getValue()
{
  return value;
}
Rectangle& Rectangle::plus(int newval)
{
  value+=newval;
  if(value>=pow(2,width))
cout<<"Overflow";
  return *this;
}

But i am getting the error on compiling Rectangle.cxx.

/tmp/cclETn3R.o:Rectangle.cxx:(.text$_ZN4GetLC2Ev[GetL::GetL()]+0*8): undefined reference to 'vtable for Getl'

How can i remove it? How can i define file GetL.cxx or i don't need to?

Upvotes: 1

Views: 158

Answers (2)

Robᵩ
Robᵩ

Reputation: 168616

You must implement GetL::getWidth(). Given your other files, you will probably implement it in GetL.cxx.

Upvotes: 0

Dietmar K&#252;hl
Dietmar K&#252;hl

Reputation: 153810

You need to compile the different files without linking first. On UNIX compilers this is typically done using the -c option. When building the executable you then specify all the produced .o objects. Alternatively you can specify all source files at once but this is really only viable for very small projects.

Upvotes: 2

Related Questions