C ++ Indefinido Referencia a vtable y herencia

Archivo Ah

#ifndef A_H_ #define A_H_ class A { public: virtual ~A(); virtual void doWork(); }; #endif 

Archivo Child.h

 #ifndef CHILD_H_ #define CHILD_H_ #include "Ah" class Child: public A { private: int x,y; public: Child(); ~Child(); void doWork(); }; #endif 

Y Child.cpp

 #include "Child.h" Child::Child(){ x = 5; } Child::~Child(){...} void Child::doWork(){...}; 

El comstackdor dice que hay una referencia indefinida a vtable para A He intentado muchas cosas diferentes y, sin embargo, ninguno ha funcionado.

Mi objective es que la clase A sea ​​una interfaz y separe el código de implementación de los encabezados.

¿Por qué el error y cómo resolverlo?

Debe proporcionar definiciones para todas las funciones virtuales en la class A Solo las funciones virtuales puras no tienen definiciones.

es decir: en la class A dos métodos:

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

debe definirse (debe tener un cuerpo)

p.ej:

A.cpp

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

Advertencia:
Si desea que su class A actúe como interfaz (también conocida como clase abstracta en C ++), debe hacer que el método sea puramente virtual.

 virtual void doWork() = 0; 

Buena lectura:

¿Qué significa que la “tabla virtual” es un external no resuelto?
Al construir C ++, el enlazador dice que mis constructores, destructores o tablas virtuales no están definidos.

Mi objective es que A sea una interfaz y separe el código de implementación de los encabezados.

En ese caso, haga que el miembro funcione como puramente virtual en la clase A.

 class A { // ... virtual void doWork() = 0; }; 

Asegúrese de eliminar cualquier archivo “* .gch” si ninguna de las otras respuestas lo ayuda.