Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con llamado a funcion (https://www.clubdelphi.com/foros/showthread.php?t=91141)

compuin 18-11-2016 17:07:27

Ayuda con llamado a funcion
 
Buenos dias foro, tengo el siguiente problema.

En una Unit 1 tengo una funcion llamada ZodiacName pero al momento de llamarla desde otra unit me arroja el error de Undeclared identifier: 'ZodiacName'

Alguna pista ?

Gracias de antemano

roman 18-11-2016 17:11:55

En la otra unidad debes agregar la primera en la cláusula uses:

Código Delphi [-]
uses Unit1;

LineComment Saludos

compuin 18-11-2016 17:14:16

Gracias

Asi lo hice pero aun asi me arroja ese mensaje de error y no lo compila

roman 18-11-2016 17:15:34

ZodicaName ¿es una función o un método (de un formulario, por ejemplo)?

LineComment Saludos

compuin 18-11-2016 17:16:37

Es una funcion

Código Delphi [-]
function ZodiacName(juldate: double):string;
var
  degree, sign, minute, second: integer;
  zs, ms, ss: String;
begin
  juldate := juldate + 1/120;
  sign := trunc(juldate/30);
  degree := trunc(juldate) - sign*30;
  minute := trunc(frac(juldate) * 60.0);
  second := trunc(frac(juldate * 60) * 60.0);
  zs := Format('%0.2d',[degree]);
  ms := Format('%0.2d',[minute]);
  ss := Format('%0.2d',[second]);
  Result := zs + '°' + ' ' + ms + '''' + ' ' + ss + '"' + ZodiacNames[sign] ;
end;

roman 18-11-2016 17:19:18

¿Donde está declarada? ¿En la sección interface o en la sección implementation?

LineComment Saludos

compuin 18-11-2016 17:22:33

En Implementation

roman 18-11-2016 17:27:17

Ahí esté el problema. Coloca esta línea en interface:

Código Delphi [-]
function ZodiacName(juldate: double):string;

Otras unidades sólo pueden ver lo que está en interface.

LineComment Saludos

compuin 18-11-2016 17:29:47

Ahora me arroja lo siguiente

Declaration expected but 'USES' found

AgustinOrtu 18-11-2016 17:30:15

Estas cosas se solucionan en un periquete si publican todo el codigo fuente relevante, con el mensaje de error del compilador y en que linea. Si no hay que ir adivinando como lo esta haciendo (y encima acertando) roman

Lo que esta en la seccion de implementation es privado a la unidad en cuestion; la unica que puede acceder a dicha funcion es la propia unidad. De hecho, dependiendo de como la tengas declarada puede tener distintos alcances

Código Delphi [-]
unit Unit1;

interface

implementation

function Zod: string; // declaracion de la cabecera, sin implementar: de esta manera es visible en toda la unit

function Foo: string;
begin
  Result := 'Foo';
end;

procedure Algo;
var
  s: string;
begin
  s := Foo; // funciona, porque foo esta implementada mas arriba que este procedimiento
  s := Bar; // no funciona!, porque esta declarada debajo; este procedimiento "no ve" la funcion Bar
  s := Zod; // este caso si funciona porque la cabecera esta declarada
end;

function Bar: string;
begin
  Result := 'Bar';
end;

function Zod: string;
begin
  Result := 'Zod';
end;

roman 18-11-2016 17:34:20

Cita:

Empezado por compuin (Mensaje 510947)
Ahora me arroja lo siguiente

Declaration expected but 'USES' found

Supongo que estás poniendo la línea antes del uses.

Código Delphi [-]
unit unit1;

interface

uses
  Tal, tal y tal;

function ZodiacName(juldate: double):string;

interface

uses
 Tal, tal y tal;

function ZodiacName(juldate: double):string;
var
  degree, sign, minute, second: integer;
  zs, ms, ss: String;
begin
  juldate := juldate + 1/120;
  sign := trunc(juldate/30);
  degree := trunc(juldate) - sign*30;
  minute := trunc(frac(juldate) * 60.0);
  second := trunc(frac(juldate * 60) * 60.0);
  zs := Format('%0.2d',[degree]);
  ms := Format('%0.2d',[minute]);
  ss := Format('%0.2d',[second]);
  Result := zs + '°' + ' ' + ms + '''' + ' ' + ss + '"' + ZodiacNames[sign] ;
end;

end.

LineComment Saludos


La franja horaria es GMT +2. Ahora son las 23:05:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi