lunes, 23 de marzo de 2009

Error: link error undefined reference to vtable

Hoy que estaba haciendo mi tarea de Programacion me tope con ese error del demonio del cual no se encuentra algo concreto en internet por lo que voy a colocar como lo solucione yo:

Primero el error se produce cuando utilizamos funciones viruales.
Yo encontre esto:

That is the most obscure error message the gcc produces, but the reason
is usually simple:

The compiler has to put the vtable into an object file. It puts it into
the object file where the definition of the first non-inline member
function is. If it is missing, you get this rather unhelpful linker
error. Please check the existence of the definitions of your member
functions.

----
Te falto definir alguna función miembro de Pixel (el destructor).
PD: deberías incluir destructores para las otras clases derivadas.


Logre resolver el problema así:
1- Inicializando la funcion virtual

[...]
virtual void graficar()=0;
[...]

2- Definiendo e "inicializando" los destructores asi

[...]
class XYZ{
//algun codigo
public:

~XYZ(){}

[...]

Este ultimo paso para TODAS LAS FUNCIONES, tanto funciones base como derivadas y listo... me funciono.

Cualquier duda dejen un comment

5 comentarios:

Anónimo dijo...

gracias por la ayuda, precisamente estaba teniendo este error compilando las librerias tls de opendiameter :)

PEDRO dijo...

Pues yo uso QTCreator y este error aparece por lo regular cuando yo cambio una clase a otro tipo, por ejemplo una clase normal hago que extienda QThread.
La forma como lo soluciono yo es borrando el archivo "Makefile" y todos los archivos que empiezan con "moc_".

De esta forma al volver a compilar como que se genera otra vez este archivo Makefile ya con la extension nueva y no genera problemas.

Andrés dijo...

Pedro... muchas gracias por el dato, tambien es de tomarlo en cuenta.

Anónimo dijo...

Me ha servido. Gracias.

Anónimo dijo...

muchas gracias colega, me estaba volviendo loco buscando como resolver el error.
salu2.....