PDA

Ver la Versión Completa : Error en el compilador de Delphi 7


Faust
27-01-2009, 21:01:07
Saludos de nuevo camaradas...

Pues sucede que hoy haciendo una pequeña aplicación para imprimir cheques noté algo que podría ser un error... uso Delphi 7 Ent sobre winXP y el siguiente código no me da error:


IniFile.ReadSections(lstCheques.Items, );


La coma indica que hay un segundo parámetro pero...

Quizás sea inteligente el analizador sintáctico y deduzca "se espera un solo parámetro, una coma y un espacio vacío extra no son problema"... con este nivel de inteligencia esto tampoco daría error:


IniFile.ReadSections(lstCheques.Items, , );


Pero si muestra el error...

¿entonces?

Al González
27-01-2009, 22:42:12
:) ¿Cuál es el mensaje de error? ¿En qué momento preciso aparece? (<-- estas dos preguntas nunca deberían ser necesarias :p)

Con esta prueba: IntToStr (5, );, me aparece el error "Too many actual parameters" al tratar de compilar, colocándose el cursor entre el paréntesis de cierre y el punto y coma (Delphi 7).

Saludos.

Al. :)

Faust
27-01-2009, 23:29:37
Este no me muestra error!!!


IniFile.ReadSections(lstCheques.Items, );



IniFile.ReadSections(lstCheques.Items, , );


En el último el error es igual que el tuyo "Too many actual parameters"

roman
27-01-2009, 23:42:03
¡Vaya! Nunca había notado esto. También


ShowMessage('Hola mundo',);


compila sin problemas :eek:

// Saludos

roman
27-01-2009, 23:50:04
Curioso...

Como dice Al, esto no compila:


IntToStr(84,);


Sin embargo esto sí :eek:


function IntToStr(N: Integer): String;
begin
Result := SysUtils.IntToStr(N);
end;

IntToStr(84,);


// Saludos

Al González
27-01-2009, 23:59:23
¡Hey!

Creo saber por dónde van los tiros:


Uses
IniFiles;

Procedure Proc1 (L :TStrings);
Begin
End;

Procedure Proc2 (S :String);
Begin
End;

Procedure Proc3 (I :Integer);
Begin
End;

Procedure Proc4 (S :String); Overload;
Begin
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
Ini :TIniFile;
begin
// ¡La compilación NO falla con estas seis llamadas!:

Ini.ReadSections (Memo1.Lines, );

Proc1 (Memo1.Lines, );

With Memo1 Do
Proc1 (Lines, );

Proc2 ('001', );

StrToInt ('001', );

Proc3 (5, );


// La compilación sí falla con estas dos llamadas

Proc4 ('001', ); // Proc4 es "Overload"

IntToStr (5, ); // IntToStr es "Overload"
end;


Tal parece que el desliz del compilador sólo ocurre con las rutinas no sobrecargadas. Con las que llevan la declaración Overload sí se fija.

¡Sorprendente descubrimiento! :eek:

Al González
28-01-2009, 00:08:01
Acabo de probarlo en Delphi 2007 también: ahí el compilador presenta el mismo extraño comportamiento.

Encontraste un defecto (bug) interesante, Faust. Si esto está desde Delphi 7, ¿acaso no habrá sido reportado ya? Habrá que echar un vistazo en QualityCentral (http://qc.codegear.com/wc/qcmain.aspx)...

poyo
28-01-2009, 01:20:48
Eso en D2009 + Upd.1 no compila. Tira error "too many..." como debería ser.
por las dudas... se fijó alguien qué código genera? si genera lo mismo que cuando la función está siendo llamada correctamente?
yo supongo que sí... pero...

Faust
28-01-2009, 05:37:12
Vaya... hoy si hice un descubrimiento... :rolleyes:

Ojalá hubiera sido un cometa, para ponerle mi nombre :D :D :D

Y aprovechando mi fugaz popularidad... por favor échenme la mano con este (http://www.clubdelphi.com/foros/showthread.php?t=63046) problemita de impresión