Foros del Web » Programación para mayores de 30 ;) » C/C++ »

URGENTE! =S Problema con herencia virtual pura en POO

Estas en el tema de URGENTE! =S Problema con herencia virtual pura en POO en el foro de C/C++ en Foros del Web. Hola a todos! Vereis, estoy haciendo un programa para la conversion a lenguaje SVG, y mi problema es que, a partir de este UML: [URL="http://www.subirimagenes.com/imagen-pantallazo-3727551.html"]http://www.subirimagenes.com/imagen-pantallazo-3727551.html[/URL] ...
  #1 (permalink)  
Antiguo 16/12/2009, 14:55
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 14 años, 5 meses
Puntos: 0
Exclamación URGENTE! =S Problema con herencia virtual pura en POO

Hola a todos!

Vereis, estoy haciendo un programa para la conversion a lenguaje SVG, y mi problema es que, a partir de este UML:
[URL="http://www.subirimagenes.com/imagen-pantallazo-3727551.html"]http://www.subirimagenes.com/imagen-pantallazo-3727551.html[/URL]
Y al compilar el programa, obtengo este error:

Código:
g++ -g -Wall -c -Iinclude -o lib/Circulo.o lib/Circulo.cc
lib/Circulo.cc: In member function ‘Circulo* Circulo::Clonar() const’:
lib/Circulo.cc:89: error: cannot allocate an object of abstract type ‘Circulo’
include/Circulo.h:26: note:   because the following virtual functions are pure within ‘Circulo’:
include/IDibujable.h:66: note: 	virtual void IDibujable::escalar(float)
include/IDibujable.h:68: note: 	virtual IDibujable* IDibujable::clonar() const
make: *** [lib/Circulo.o] Error 1
y no lo entiendo, puesto que tengo la clase IDibujable con todos sus metodos virtuales puros (igualados a 0), el destructor de Figura2D declarado también virtual puro para que sea abstracta la clase, y redefino las funciones en Circulo y Rectangulo, para poder instanciar Circulos y Rectangulos, pero no me deja y no pongo nada virtual en ninguna de las dos clases y los metodos son identicos a los heredados salvo que devuelve una instancia de Rectangulo o Circulo segun sea Clonar de Rectangulo o Clonar de Circulo, es decir:

En circulo.cc

Código:
Circulo* Circulo::Clonar() const
{
	Circulo *c = new Circulo(*this);
	return c;
}
En rectangulo.cc

Código:
Rectangulo* Rectangulo::Clonar() const
{
	Rectangulo *r = new Rectangulo(*this);
	return r;
}
y el metodo que sobreescriben esta definido en IDibujable.h asi:
Código:
virtual IDibujable* clonar() const=0;
gracias por la ayuda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.