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) |