Forum > Spanish

problema con metodo abstracto

(1/3) > >>

zelda16bit:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit Upadre; {$mode objfpc}{$H+} interface uses  Allegro5,Generics.Collections; type  Tpadre = class    strict private      padre: Tpadre;      lista: specialize TObjectList<Tpadre>;    public      constructor Create();      procedure pintar();virtual;abstract;      procedure actualizar();      destructor Destroy(); override;  end; implementation   constructor Tpadre.Create();  begin    lista := specialize TObjectList<Tpadre>.Create(True);    lista.Add(Self);  end;   procedure Tpadre.actualizar();  begin    for padre in lista do begin      padre.pintar();    end;  end;   destructor Tpadre.Destroy();  begin    lista.Free();    lista := nil;  end; end.  
He creado el metodo abstracto pintar para utilizarlo en las clases hijas que hereden de esta,en la clase padre no lo voy a utilizar solo en las hijas pero en el metodo actualizar lo llamo porque este metodo se encargara de actualizar todos lo metodos pintar de todas las clases hijas, sin embargo me dice el compilador que no se puede usar y me da error.

¿Cual es la manera de solucionar este problema?

janasoft:
Buenos días.
Si lo vas a utilizar en la propia clase creo que debes eliminar la declaración 'abstract'.
Con que tengas 'override' es suficiente para poder declararlo en las clases descendientes.
Saludos

Edson:
¿Cuál es el error que te muestra el compilador?

zelda16bit:

--- Quote from: janasoft on December 29, 2022, 12:12:29 pm ---Buenos días.
Si lo vas a utilizar en la propia clase creo que debes eliminar la declaración 'abstract'.
Con que tengas 'override' es suficiente para poder declararlo en las clases descendientes.
Saludos

--- End quote ---

Si quito la declaracion 'abstract' me la marca en rojo y  me dice:
-error Forward declaration not solvet "pintar;"

zelda16bit:

--- Quote from: Edson on December 29, 2022, 02:27:30 pm ---¿Cuál es el error que te muestra el compilador?

--- End quote ---

Me sale una ventana con este mensaje:

-El proyecto alegro10 ha lanzado una excepcion de la clase 'RunError(211)'

En archivo 'Upadre.pas' en linea 41:
padre.pintar();

Si le doy a ignorar la excepcion y le doy a continuar me sale otra ventana con este mensaje:

El proyecto alegro10 ha lanzado una excepcion 'EAbstractError': con el mensaje Abstract method called

Si le vuelvo a ignorar la excepcion el programa se cierra sin mas.

Navigation

[0] Message Index

[#] Next page

Go to full version