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 12-07-2007
gaps2k gaps2k is offline
Miembro
 
Registrado: may 2006
Posts: 27
Poder: 0
gaps2k Va por buen camino
Funciones y Polimorfismo: Como pasar parámetros

Hola Listeros,

Estoy desarrollando una apliación en donde tengo varias estructuras similares, que difrieren más que todo en cantidad de atributos que en comportamiento.

Tengo Detalles de Factura, de Ordenes de Compra y De Ordenes Productivas.

Declaro una Clase TDetalle que tiene los valores y comportamiento común a todos. Y declaro las otras clases Heredando de esta,

Ej: TDetalleFactura que hereda de TDetalle
TDetalleFactura = Class(TDetalle)

El problema que tengo es que declaro una función que recibe como parámetro un Objeto de tipo TDetalle y cuando trato de pasarle un TDetalleFactura o TDetalleOrden, me dice que los tipos de datos son incompatibles.

La función no pertenece a ninguna de las Clases, solo las recibe como parámetro. Trabajo Delphi 7.

Espero que puedan ayudarme (o guiarme!!).
Responder Con Cita
  #2  
Antiguo 12-07-2007
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,

Podrías poner algo del código fuente implicado en el asunto. Lo cierto es que deberías poder pasar como parámetro un "TDetalleFactura", por ejemplo, en un procedimiento que requisiera un "TDetalle", o sea, lo que necesitas puede hacerse, habría que ver, entonces, cómo estás tratando de hacerlo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 12-07-2007
gaps2k gaps2k is offline
Miembro
 
Registrado: may 2006
Posts: 27
Poder: 0
gaps2k Va por buen camino
Código

Código Delphi [-]
//Esta es la clase madre
 
Type
TDetalle = class(TObject)
-
-
end;
 
//Clase Derivada
 
Type
TDetalleFactura = class(TDetalle)
-
-
end;
 
//funcion Problematica
function trabajar_fila(fila, columna : integer; mueve : boolean; encabezado:TEncabezado; 
  lineas:array of TDetalle; sql:TQuery; grid_prod:TStringGrid) : boolean;

Según la teroría debería funcionar!!

Última edición por dec fecha: 12-07-2007 a las 23:39:40.
Responder Con Cita
  #4  
Antiguo 12-07-2007
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,

Alto ahí forastero, no te llevarás nuestro oro... huy, perdón, que me lío. Que digo que la "función problemática" requiere, precisamente, un "array de TDetalles", o sea, no un "TDetalle" cualquiera. Ojo, ¿seguro que estás intentando pasar un Array? Hagamos una cosa, transcribe aquí, literalmente, el error que te da el compilador.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 12-07-2007
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,

Vale... a lo mejor me estoy pasando de listo o me estoy perdiendo algo. Haciendo algunas pruebas, aunque la "función problemática" requiera un "Array de TDetalle", lo cierto es que acepta también que se le pase un simple "TDetalle".

Pero, ojo, en mis pruebas puedo pasar también a la función un "TDetalleFactura" sin problemas...

Y ahora la duda la tengo yo... ¿Cómo es que acepta la función un simple "TDetalle" si lo que requiere es un Array? Yo estoy no lo había visto antes. Y además puede llamarse a la función tanto así:

Código Delphi [-]
Func(Detalle)

Como así:

Código Delphi [-]
Func([Detalle])

Que sería lo que se entendería mejor... ¿Alguien puede decir algo a este respecto? Gracias.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 12-07-2007 a las 23:39:05.
Responder Con Cita
  #6  
Antiguo 12-07-2007
gaps2k gaps2k is offline
Miembro
 
Registrado: may 2006
Posts: 27
Poder: 0
gaps2k Va por buen camino
Recibe TDetalle y Array of TDetalle

Cita:
Empezado por dec
Hola,
Y ahora la duda la tengo yo... ¿Cómo es que acepta la función un simple "TDetalle" si lo que requiere es un Array? Yo estoy no lo había visto antes. Y además puede llamarse a la función tanto así:
...
Que sería lo que se entendería mejor... ¿Alguien puede decir algo a este respecto? Gracias.
Lo que entiendo (y que alguien me corrija si estoy mal), es que al pasar el array, lo que la función recibe es una referencia al Primer elemento, por eso sin importar si el arreglo se declaro [1..5], ó [2..6], siempre se va a tomar el primer elemento como: elemento [0]
Responder Con Cita
  #7  
Antiguo 12-07-2007
gaps2k gaps2k is offline
Miembro
 
Registrado: may 2006
Posts: 27
Poder: 0
gaps2k Va por buen camino
Necesito Tener 6 Documentos simultaneamente

trabajar_fila(i, 0, false,
encabezados_orden[i], //este es un TencabezadoOrden array [0..5]
grid[i], //arreglo de Detalles
sql_aux, //tquery
grid_prod) //TStringGrid

El grid[i], es un: grid : array[0..5, 1..8] of TLineaOrdenProduccion;

(TLineaOrdenProduccion, hereda de TDetalle)

El errior dice:

(1069): incompatible types
Responder Con Cita
  #8  
Antiguo 12-07-2007
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,

¿No deberías especificar "el grid" mediante dos índices? Es decir:

Código Delphi [-]

grid[i][j]

Lo digo porque:

Código Delphi [-]
grid: array[0..5, 1..8] of TLineaOrdenProduccion;
__________________
David Esperalta
www.decsoftutils.com
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
Pasar matriz como parámetros bosterito Varios 1 26-11-2006 03:42:40
Polimorfismo con diferentes parámetros Deiv OOP 6 24-11-2006 21:56:56
Cómo pasar los parámetros? dunia_lv Impresión 0 15-04-2005 16:26:42
Como pasar parametros en la llamada de mi ejecutable? Javi2 Varios 4 14-07-2004 16:28:35
como pasar parametros... hook SQL 13 11-05-2004 19:24:14


La franja horaria es GMT +2. Ahora son las 21:13:47.


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