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