como resolver erro: Undeclared identifier

Delphi

13/05/2017

function in_array(i_nr,i_array : boolean) : boolean;
var k : Integer;
begin
result:=false;
for k:=0 to VarArrayHighBound(i_array,1) do begin
if i_nr=i_array[k] then begin
result:=True;
break;
end;
end;
end;

Erro: Undeclared identifier: "VarArrayHIghBound"
Roberto Rodrigues

Roberto Rodrigues

Curtidas 0

Respostas

Gutierry Pereira

Gutierry Pereira

13/05/2017

Boa tarde,
Este erro sempre ocorre quando esta tentando utilizar uma variavel/objeto/componente que não foi previamente declarado.
Diferete de linguagens fracamente tipada o delphi exite a declaração previa das variáveis.

Declare a VarArrayHIghBound no escopo desejado com seu devido tipo, caso a mesma já esteja declarada mas em uma outra unit, declare a unit na uses.
GOSTEI 0
Marco Antônio

Marco Antônio

13/05/2017

Bom dia Roberto,
essa função precisa da Unit ''Variants'', dependendo da versão do Delphi que vc estiver utilizando será preciso declarar ''System.Variants''.

Abcs
GOSTEI 0
Roberto Rodrigues

Roberto Rodrigues

13/05/2017

Var VarArrayHIghBound : Integer; // Ok declarando ela como integer funciona,
pois eu sei que ela percorre todo a array até o seu final.
Logo seu valor no caso é 37.

Então eu posso substituir esse termo pelo número 37 que vai funcionar
da mesma forma, porem obtenho outro erro.

function in_array(i_nr,i_array : boolean) : boolean;
var k : Integer;
begin
result:=false;
for k:=0 to 37(i_array,1) do begin
if i_nr=i_array[k] then begin
result:=True;
break;
end;
end;
end;

Erro: Missing operator or semicolon
Erro aqui: (i_array,1)

O que você acha?
GOSTEI 0
Marco Antônio

Marco Antônio

13/05/2017

Var VarArrayHIghBound : Integer; // Ok declarando ela como integer funciona,
pois eu sei que ela percorre todo a array até o seu final.
Logo seu valor no caso é 37.

Então eu posso substituir esse termo pelo número 37 que vai funcionar
da mesma forma, porem obtenho outro erro.

function in_array(i_nr,i_array : boolean) : boolean;
var k : Integer;
begin
result:=false;
for k:=0 to 37(i_array,1) do begin
if i_nr=i_array[k] then begin
result:=True;
break;
end;
end;
end;

Erro: Missing operator or semicolon
Erro aqui: (i_array,1)

O que você acha?


Bom dia Roberto, antes de mudar o seu raciocínio e a tua rotina, vc simplesmente declarou a Unit ''Variants'' ou ''System.Variants'' para a rotina que inicio o POST?
GOSTEI 0
Marco Antônio

Marco Antônio

13/05/2017

Var VarArrayHIghBound : Integer; // Ok declarando ela como integer funciona,
pois eu sei que ela percorre todo a array até o seu final.
Logo seu valor no caso é 37.

Então eu posso substituir esse termo pelo número 37 que vai funcionar
da mesma forma, porem obtenho outro erro.

function in_array(i_nr,i_array : boolean) : boolean;
var k : Integer;
begin
result:=false;
for k:=0 to 37(i_array,1) do begin
if i_nr=i_array[k] then begin
result:=True;
break;
end;
end;
end;

Erro: Missing operator or semicolon
Erro aqui: (i_array,1)

O que você acha?


Bom dia Roberto, antes de mudar o seu raciocínio e a tua rotina, vc simplesmente declarou a Unit ''''Variants'''' ou ''''System.Variants'''' para a rotina que inicio o POST?
GOSTEI 0
Roberto Rodrigues

Roberto Rodrigues

13/05/2017

Não marcos,
não sei onde e como declarar a Unit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Variants'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ou ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''System.Variants''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Se vc me dar um exemplo de como usar isso pra a VarArrayHIghBound da Unit1, agradeço;

porque declarando Var VarArrayHIghBound : Integer; resolve
ou substituindo pelo valor correto que ela traz,

mas independente dos dois casos, agora tenho o segundo erro:

Erro: Missing operator or semicolon
Erro aqui: (i_array,1)
GOSTEI 0
Roberto Rodrigues

Roberto Rodrigues

13/05/2017

Sim amigo eu vi que System.Variants já está declarada no uses.

Achei a solução assim:

Substituir VarArrayHighBound(i_array,1) por 37
que é o valor total da array que ela vai retornar

Então funciou,

obrigado pela ajuda.
GOSTEI 0
POSTAR