FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Error al aplicar HELPER sobre varios TARRAY
Hola a todos!!
Me estoy encontrando con un problema al usar helper sobre ciertas estructuras de datos, y no se si es un error mío en la forma de aplicar los helpers, o un error de la versión de delphi, detallo el problema: Con la siguiente estructura de datos y helper todo funciona correctamente y al pulsar el botón ejecuta su proceso sobre cada estructura de datos, y hasta aquí todo correcto:
Pero si los array de datos en vez de estar definido como en la forma 1 los defino a través de la estructura TArray que internamente se supone que es identico: Código:
/// 2.) TArrayA = TArray<TDatoA>; TArrayB = TArray<TDatoB>; [dcc32 Error] Unit2.pas(61): E2003 Undeclared identifier: 'Proces_A' El error básicamente es similar a cuando a una estructura de datos se le pretende asignar varios helpers distintos, pero en este ejemplo concreto son dos estructuras de datos distintas. La solución pasa por no usar TARRAY, pero ¿realmente es un error de uso de HELPERS? o ¿es un bugs de delphi? |
#2
|
||||
|
||||
A mi esto me compila y se ejecuta perfectamente en Delphi 11.2 Patch 1
NOTA: No uso la etiqueta de Delphi, porque parece que no gestiona bien los símbolos de MayorQue y MenorQue de los genéricos. Código:
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TDatoA = record A: integer; end; TDatoB = record B: integer; end; /// 2.) TArrayA = TArray<TDatoA>; TArrayB = TArray<TDatoB>; TArrayAHelper = record helper for TArrayA procedure Clear; end; TArrayBHelper = record helper for TArrayB procedure Clear; end; TForm3 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private A: TArrayA; B: TArrayB; public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.Button1Click(Sender: TObject); begin /// ... A.Clear; B.Clear; end; { TArrayAHelper } procedure TArrayAHelper.Clear; begin var len:integer := Length(Self); // form3.Memo1.Lines.Add('Longitud=' + len.ToString); for var i:integer := 0 to len-1 do Self[i].A := 0; end; { TArrayBHelper } procedure TArrayBHelper.Clear; begin var len:integer := Length(Self); // form3.Memo1.Lines.Add('Longitud=' + len.ToString); for var i:integer := 0 to len-1 do Self[i].B := 0; end;
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Hola Neftali, gracias por responder!!
Con el ejemplo tal y como tu lo has puesto, con el mismo nombre del procedimiento para ambas estructuras, entonces si se compila y ejecuta, pero me pasan varias cosas raras: - si a las funciones les pongo para que muestre un mensaje e identificar el procedimiento que se esta ejecutando, siempre se ejecuta el proceso de la estructura B y nunca el de la estructura A.
Y si en los helpers a los procesos los llamo de distinta forma para cada estructura, entonces obtengo el mismo error inicial el error entonces es: [dcc32 Error] Unit2.pas(69): E2003 Undeclared identifier: 'ClearA' |
#4
|
||||
|
||||
No se, a mi sí me ejecuta los procedimientos correctos y me diferencia entre el A y el B.
Te adjunto la imagen y el proyecto completo, para que lo compares.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Gracias Neftali por el tiempo dedicado!!
En mi delphi (xe7) con tu proyecto sigo teniendo el problema, imagino que será algo que no esta fino de mi instalación. Intentare ver como solucionarlo, y de nuevo gracias por el tiempo dedicado!! |
#6
|
||||
|
||||
Cita:
Yo lo he probado con una 11 (no se si lo había comentado).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
String to TArray<T> | elrayo76 | Varios | 9 | 30-06-2022 00:14:27 |
Función que retorne Tarray<T> | movorack | OOP | 2 | 23-09-2021 16:30:39 |
HELPER: Insertar ProgressBar en LISTITEM | bucanero | Trucos | 6 | 07-09-2018 09:19:28 |
crear HELPER | juank1971 | OOP | 3 | 08-02-2018 21:57:17 |
me marca error al aplicar update | Pascual Montes | SQL | 1 | 08-06-2005 19:20:50 |
|