Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error de tipos al armar herencia (https://www.clubdelphi.com/foros/showthread.php?t=31019)

supermilloriver 25-04-2006 23:06:53

Error de tipos al armar herencia
 
Gente: Vean este Código:

Código Delphi [-]
type TForm1 = class(TForm)
  Label1: TLabel;
  private
  { Private declarations }
  public
  { Public declarations }
  function miFuncion:Integer;virtual;
end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.miFuncion:Integer;
begin
  result := 0;
end;

type TForm2 = class(TForm1)
  private
  { Private declarations }
  public
  { Public declarations }
    function miFuncion:Integer;override;
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

function TForm2.miFuncion:Integer;
var
  valor:Integer;
begin
  inherited; ***
  showmodal;
  result := 0
end;

Bueno, tenemos a TForm2 que hereda de TForm1... no importa la funcionalidad, lo que me llama la atención es que al querer compilar me tira error: Incompatible Types en la linea *** y no se porque... cabe aclarar que si en lugar de una función utilizo en las dos clases, un procedure, no tengo ningún problema: compila... pero ¿porque puede ser el error?

Gracias y bye bye
Gabriel

dec 26-04-2006 00:45:10

Hola,

Cita:

Bueno, tenemos a TForm2 que hereda de TForm1... no importa la funcionalidad, (...)
Aunque creo saber lo que quieres decir conque "no importa la funcionalidad" (para el ejemplo), sin embargo, creo que en este caso sí que importa, puesto que, ¿qué se supone que ha de conseguir el "inherited"? Se está tratando de llamar a una función, que devuelve un resultado,... ¿pero a quién? ¿Al "inherited"? No, desde luego.

Pienso que el "inherited" no tiene mucho sentido ahí. No soy capaz de explicar el porqué del error, quiero decir, de la incompatibilidad de tipos, pero, lo que se me hace rarísimo es ver ahí un "inherited", no le encuentro sentido; tal vez tenga algún sentido, pero, a mí me parece que no, que no lo tiene, y por eso el compilador no continúa adelante.

Probablemente alguien podrá proporcionar más información y con más fundamento. ;)

roman 26-04-2006 03:15:11

Realmente yo tampoco sé cuál es la explicación. Al parecer, en el caso de funciones hay que especificar el nombre de la función:

Código Delphi [-]
inherited miFuncion;

// o bien

Result := inherited miFunción + 84;

// Saludos

dec 26-04-2006 14:19:53

Hola,

Pues en el caso de la segunda instrucción que propones Román todavía encuentro un sentido más o menos claro, pero, en el caso de la primera, aunque permitida, no veo el sentido, porque, ¿dónde demonios queda el resultado de la función? No se ve por ningún sitio... o yo no soy capaz de verlo. ;)

Como no fuera una especie de reaprovechamiento de la función para otros menesteres... es decir, algo así como "me interesa lo que va a llevar a cabo esa función, me da igual el resultado de la misma, así que la llamo y punto". ¿Porqué no convertirla en un procedimiento? Qué sé yo... ¡si no sé nada! :)

supermilloriver 26-04-2006 14:50:56

Ahora funciona
 
Cita:

Empezado por roman
Realmente yo tampoco sé cuál es la explicación. Al parecer, en el caso de funciones hay que especificar el nombre de la función:


Código Delphi [-]
inherited miFuncion;

// o bien

Result := inherited miFunción + 84;





// Saludos


Bueno, mil gracias Román... ahora funciona, era por lo que vos decis.

Aclaraciones:
Cuando dije anteriormente que no importaba la funcionalidad me referia a que con esa implementacion no quiero lograr nada, simplemente estaba chusmeando la herencia, e hice ese codigo y me pareció raro que no funcionara, porque aunque no llegara a nada, aunque no fuera algo útil, tenía que andar... lo que no se me ocurrió probar fue poner el nombre de la función luego del inherited...

Saludos y gracias
Gabriel


La franja horaria es GMT +2. Ahora son las 19:33:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi