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.
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 Aboth the methods:should be defined(should have a body)
e.g.:
A.cpp
Caveat:
If you want your
class Ato act as an interface(a.k.a Abstract class in C++) then you should make the method pure virtual.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.