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:
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: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
En circulo.cc
Código:
En rectangulo.ccCirculo* Circulo::Clonar() const { Circulo *c = new Circulo(*this); return c; }
Código:
y el metodo que sobreescriben esta definido en IDibujable.h asi:Rectangulo* Rectangulo::Clonar() const { Rectangulo *r = new Rectangulo(*this); return r; }
Código:
gracias por la ayuda virtual IDibujable* clonar() const=0;