rjmarques rjmarques - 25 days ago 8
C++ Question

C++ Undefined Reference to vtable and inheritance

File A.h

#ifndef A_H_
#define A_H_

class A {
public:
virtual ~A();
virtual void doWork();
};

#endif


File Child.h

#ifndef CHILD_H_
#define CHILD_H_

#include "A.h"

class Child: public A {
private:
int x,y;
public:
Child();
~Child();
void doWork();
};
#endif


And Child.cpp

#include "Child.h"

Child::Child(){
x = 5;
}

Child::~Child(){...}

void Child::doWork(){...};


The compiler says that there is a undefined reference to vtable for
A
.
I have tried lots of different things and yet none have worked.

My objective is for class
A
to be an Interface, and to seperate implementation code from headers.

Answer

Why the error & how to resolve it?

You need to provide definitions for all virtual functions in class A. Only pure virtual functions are allowed to have no definitions.

i.e: In class A both the methods:

virtual ~A();
virtual void doWork();

should be defined(should have a body)

e.g.:

A.cpp

void A::doWork()
{
}
A::~A()
{
}

Caveat:
If you want your class A to act as an interface(a.k.a Abstract class in C++) then you should make the method pure virtual.

virtual void doWork() = 0;

Good Read:

What does it mean that the "virtual table" is an unresolved external?
When building C++, the linker says my constructors, destructors or virtual tables are undefined.

Comments