Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2006
supermilloriver supermilloriver is offline
Miembro
 
Registrado: jul 2005
Posts: 32
Poder: 0
supermilloriver Va por buen camino
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

Última edición por dec fecha: 25-04-2006 a las 23:29:08.
Responder Con Cita
  #2  
Antiguo 26-04-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 26-04-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #4  
Antiguo 26-04-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 26-04-2006
supermilloriver supermilloriver is offline
Miembro
 
Registrado: jul 2005
Posts: 32
Poder: 0
supermilloriver Va por buen camino
Smile 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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error de herencia en diseño con subcomponente rastafarey OOP 5 12-05-2013 11:48:34
Se puede armar un dbgrid con la siguiente info ? ale21alito Conexión con bases de datos 5 16-03-2005 17:49:16
Leer un TQuery y armar un archivo de texto Oscar25 Conexión con bases de datos 1 01-09-2004 16:21:51
Un consejo sobre como armar una bd Walterdf Conexión con bases de datos 4 11-05-2004 19:53:33
¿Cómo armar un foro en Delphi 7.0? quiro_eze Internet 0 07-10-2003 00:12:11


La franja horaria es GMT +2. Ahora son las 21:15:10.


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
Copyright 1996-2007 Club Delphi