![]() |
Pasar array como parámetro
Buenas, tengo la siguiente definición:
Ahora, hasta aquí todo bien pero resulta que quiero llamar al procedimiento de la siguiente forma y no me deja:
Se que de la manera tradicional puede hacerse pero necesitaría que el pasaje fuera de la manera que indico pues evitaría que yo inicializara el array dinámico, que armara uno por uno los registros y todo eso. Creo que estoy haciendo algo mal por eso no me deja hacer el pasaje de esa manera. Pido que alguien me corrija o brinde alguna sugerencia. Saludos. |
Ensaya con esto
|
Array
Cita:
Para citar un ejemplo aún mas claro, si hago lo siguiente no hay problemas:
Gracias. |
array
Para ser mas gráfico, estoy ante un problema que se llama "Parámetros de vector abierto (Open Array)"
Espero que alguien tenga una idea de como arreglar la cosa. Saludos. |
Hola santiago14,
La verdad es que no te sabría decir si es posible hacer lo que buscas. Una posible alternativa es que el procedimiento reciba dos vectores dinámicos. Se que no es demasiado elegante, pero es una opción. La otra alternativa que se me ocurre es un tanto mas complicada y tal vez sea demasiado para tus propósitos: en vez de tener un record, implementar una clase TDatos que tenga los mismos campos. Después tener un TObjectList que hará de vector. De este modo el procedimiento puede recibir a un objeto TObjectList y recorrer todos los objetos TDatos que estén dentro de éste. El asunto es que este enfoque obliga a crear cada objeto TDato y llenarlo por separado, y relacionarlo con el TObjectList. Por esto digo que tal vez esta opción sea más complicada que tener dos vectores. Saludos, |
Hola Santiago14, creo que así directamente no se puede, la forma que se me ocurre es inicializar como una constante de esta forma:
la otra forma es darle tu los valores correspondientes a cada atributo de tu registro, para luego pasar ese array como parametro.
Saluditos |
agradecimentos
Quiero agradecerles a todos que a esta hora de la noche se han tomado la molestia de buscar una solución a todo esto.
Hasta ahora no he tenido buenos resultados; espero encontrar la respuesta en el corto plazo. Agradecido nuevamente les deseo buenas noches. Por supuesto que voy a considerar todas las respuestas y veo si haciendo un merengue entre todas puedo llegar a algo. Por favor, si tienen nuevas sugerencias no duden en ponerlas. |
Yo tengo esto funcionando en Delphi 6 desde hace mucho tiempo:
|
Hola, es normal q te salte error puesto q no le estas pasando un array de TDatos, sino un array de enteros. Puedes hacer varias cosas (para mantener el formato de pares de numeros...).
1.- hacer overload de 'proceso' : mientras que en una acepte array de tdatos, en la otra acepte array de [0..1] real (pares de numeros), llamando, luego de transformar los parametros, una a la otra, segun te convenga. 2.- Crear una clase cuyo constructor acepte pares de numeros, tendras que llamar a proceso entonces de la manera proceso([TDatos(0,1),TDatos(20,3)]) etc... 3.- Crear una funcion que, a partir de pares de numeros, te devuelva un array de tdatos. Algo parecido a Rect()... te quedaria como proceso(A_Datos([(0,1),(20,80),(30,20)])); 4.- Crear una clase TDatos con un array [0..1] of double, y dentro ella crear dos propiedades, temperatura y humedad, con su read/write, los cuales devolverian v[0] i v[1]; 5.- Que proceso solo acepte array de array[0..1] of double, y que TDatos sea eso (type TDatos : array [0..1] of double), sabiendo tu ya q el primer valor es temperatura y el segundo humedad. ... y alguna q otra manera mas hay, seguro... Para mi la mejor de todas seria la primera (la menos laboriosa y visualmente mas entendible, una vez escrita) si bien segun para q lo quieras (si tiene q desarrollarse bastante) quizas te salga mas a cuenta crear una clase correctamente (la opcion 4). Creo q en c del antiguo si se podia tratar una struct (record) asi tal como escribes, colocandose cada valor en su sitio. Me parece q la OOP anulo esto , pues son necesarios los typecast para casi todo. Igualmente, no estoy seguro, investigo un poco. Saludos y a ver si te sirve lo escrito. |
otra...esta es analoga a como trabaja TPoint. |
Muy bueno
Cita:
|
La franja horaria es GMT +2. Ahora son las 12:50:07. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi