C++ Undefined Reference to vtable and inheritance
Solution 1
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.
Solution 2
My objective is for A to be an Interface, and to seperate implementation code from headers.
In that case, make the member function as pure virtual in class A.
class A {
// ...
virtual void doWork() = 0;
};
Solution 3
Make sure to delete any "*.gch" files if none of the other responses help you.
rjmarques
Updated on November 10, 2020Comments
-
rjmarques over 3 years
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.