c++ inheritance vtable

C++ Indefinido Referencia a vtable y herencia



inheritance (3)

Mi objetivo 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; };

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 "A.h" 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 compilador dice que hay una referencia indefinida a vtable para A He intentado muchas cosas diferentes y, sin embargo, ninguno ha funcionado.

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


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


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

Debe proporcionar definitions 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.