2. Identifier redeclared: 'fakt'

Pôvodný zdrojový kód

unit fakt;

interface

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

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

var
Form1: TForm1;
fakt: integer;

implementation

{$R *.dfm}

function faktorial(n: integer): integer;
var f, i: integer;
begin
f:= 1;
for i:= 1 to n do f:= f*i;
faktorial:= f;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n: integer;

begin
n:= StrToInt(Edit1.Text);
fakt:= faktorial(n);
Label1.Caption:= Edit1.Text + '! = ' + IntToStr(fakt);
end;

{

[Error] fakt.pas(23): Identifier redeclared: 'fakt'
--------------------------------------------------------------------------------

Viacnásobná deklarácia identifikátora fakt.

PREČO?

Súbor so zdrojovým kódom sme pomenovali rovnako ako globálnu premennú.

RIEŠENIE

Premennú fakt deklarujeme ako lokálnu premennú v procedúre, kde ju používame.

alebo

Zmeníme meno premennej alebo meno unitu, tak, aby boli rôzne.

Upravený zdrojový kód

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

var
Form1: TForm1;

implementation

function faktorial(n: integer): integer;
var f, i: integer;
begin
f:= 1;
for i:= 1 to n do f:= f*i;
faktorial:= f;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n, fakt: integer;

begin
n:= StrToInt(Edit1.Text);
fakt:= faktorial(n);
Label1.Caption:= Edit1.Text + '! = ' + IntToStr(fakt);
end;

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

}

end.


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