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 14-10-2011
ManiacPC ManiacPC is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 14
Poder: 0
ManiacPC Va por buen camino
Question Un array loco por paso de parámetros de referencia

Buenas,

Me he topado con lo siguiente en mi programación... Busqué y tiene algo que ver con los arrays dinámicos, pero estoy algo enredado
Trataré de explicar la situación a ver si a alguien le ha ocurrido:

1) Tengo una clase

Código Delphi [-]
Type
  TClaseCualquiera = Class
    private
      UnArrayDinamico : Array Of Integer;
      OtroArrayDinamico : Array Of Integer;
    published
      constructor Create;
      procedure LimpiarArray(var MiArray: Array of Integer);
    end;

2) Quiero usar un array dinámico que guarde datos enteros (en este caso, p.ej: UnArrayDinamico y OtroArrayDinamico), y resetearlo a 0 cada vez que sea necesario... Por ende, limpiar el array
por lo que usé la función LimpiarArray que es una que encontré en el mismo foro de ClubDelphi


Código Delphi [-]
{procedimiento para limpiar un array por referencia}
procedure TClaseCualquiera.LimpiarArray(var MiArray: Array Of Integer);
Var
  x: Byte;
Begin
   SetLength(MiArray,10);  //redimencionas el arreglo a tamaño 10
   for x:=0 to High(MiArray) do
    MiArray[x]:=x;
   {...}
    SetLength(MiArray,0);//redimencionas el arreglo a tamaño 0
End;

3) El error, va en el SetLength (¿raro no?), dice explícitamente:
[DCC Error] E2008 Incompatible types

Justo en la línea de:
Código Delphi [-]
   SetLength(MiArray,10);  //redimencionas el arreglo a tamaño 10

Y en todas las que tengan el SetLength...
¿Alguna idea?
Leí estos sitios, pero estoy algo enredado :S
http://rvelthuis.de/articles/articles-openarr.html
http://stackoverflow.com/questions/1...ray-of-tobject

Un cálido saludo
Un seguidor de hace años de ClubDelphi
Enrique P.
Responder Con Cita
  #2  
Antiguo 14-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

El problema se debe a que tenés una confusión entre el concepto de array dinámico y el de vectores abiertos.

Un array dinámico es un tipo de datos y se tiene que declarar como tál, es un verdadero arreglo. En cambio un vector abierto es sólo una manera de pasar argumentos a un procedimiento o función.

Para ejemplificar lo que te comento:
Código Delphi [-]
...
type
  TArrayInteger = array of Integer;

procedure Test1(Vec: TArrayInteger);
begin
  SetLength(Vec,10);
  SetLength(Vec,0);
end;

procedure Test2(Vec : array of Integer);
begin
  SetLength(Vec,10);  // error no se le puede asignar tamaño
  SetLength(Vec,0);   //  idem
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  V: TArrayInteger;
begin
  Test1(V);    // el argumento es un array dinámico
  Test2([1,2,3,4]); // el argumento es un array abierto
end;
...
Ejemplo de uso de un array abierto
Código Delphi [-]
...
procedure CerrarDataSets(VDataset: array of TDataSet);
var
  i: Integer;
begin
  for i:= Low(VDataSet) to High(VDataSet) do
    TDataSet(VDataSet[i]).Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   CerrarDataSets([DataSet1, DataSet2, DataSet3,...]);
end;
...

Es decir que tu código inicial debería ser algo como:
Código Delphi [-]
Type
  VDinamico = array of Integer;
  TClaseCualquiera = Class
    private
      UnArrayDinamico : VDinamico;
      OtroArrayDinamico : VDinamico;
    published
      constructor Create;
      procedure LimpiarArray(var MiArray: VDinamico);
    end;

Espero me haya explicado bíen.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-10-2011 a las 00:40:09.
Responder Con Cita
  #3  
Antiguo 14-10-2011
ManiacPC ManiacPC is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 14
Poder: 0
ManiacPC Va por buen camino
Grande

Worked like a charm!
¡El último caso que me pusiste pasó sin vaselina!

Se te agradece che, eres un extraterrestre. jaja
Un saludo
Enrique P.
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
Paso de Array Dinamico a Procedimiento por Referencia. eLYaN OOP 7 08-11-2008 23:40:39
Paso de Array entre Clases juangiron OOP 13 02-05-2007 12:01:07
Paso de Array en variable $_POST mieltxo PHP 4 16-06-2005 08:22:51
Paso de parametros Delphos Varios 4 18-01-2005 15:32:07
Paso de parametros senpiterno Varios 1 11-04-2004 03:44:17


La franja horaria es GMT +2. Ahora son las 11:46:12.


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