Error: Identifier redeclared

1. Identifier redeclared: 'i'

Pôvodný zdrojový kód

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ret: string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i, male, velke: integer;
ret: string;
i: integer;
begin
ret:= Edit1.Text;
male:= 0;
velke:= 0;

for i:= 1 to length(ret) do
if (ret[i]>='a') and (ret[i]<='z') then inc(male)
else if (ret[i]>='A') and (ret[i]<='Z') then inc(velke);

Label1.Caption:= 'Pocet malych pismen: ' + IntToStr(male);
Label2.Caption:= 'Pocet malych pismen: ' + IntToStr(velke);
end;

{

[Error] Unit1.pas(33): Identifier redeclared: 'i'
--------------------------------------------------------------------------------

Viacnásobná deklarácia identifikátoru i.

PREČO?

Premennú i sme deklarovali dvakrát.

RIEŠENIE

Jednu z deklarácií odstránime.

POZNÁMKA

Premenná ret je tiež deklarovaná dva razy. Raz ako globálna, raz ako lokálna
premenná. V procedúre lokálna premenná prekrýva globálnu s rovnakým menom.
V tomto prípade o chybu nejde (ak, tak logickú, ktorú prekladač neodhalí).

Upravený zdrojový kód

--------------------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var i, male, velke: integer;
ret: string;
begin
ret:= Edit1.Text;
male:= 0;
velke:= 0;

for i:= 1 to length(ret) do
if (ret[i]>='a') and (ret[i]<='z') then inc(male)
else if (ret[i]>='A') and (ret[i]<='Z') then inc(velke);

Label1.Caption:= 'Pocet malych pismen: ' + IntToStr(male);
Label2.Caption:= 'Pocet malych pismen: ' + IntToStr(velke);
end;

--------------------------------------------------------------------------------

}

end.

Stiahnuť vzorový príklad (zdrojové kódy v Delphi)