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.