Classe in Procedure als Const deklariert

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6914
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Classe in Procedure als Const deklariert

Beitrag von Mathias »

Bei SetNr kann ich die Variable obj verändern.
Bei int kommt schon beim kompilieren ein Fehler.

Müsste bei SetNr kein Kompilerfehler kommen ?

Eigentlich wollte ich obj als var deklarieren, aber dies geht nicht.

Code: Alles auswählen

type
  TVater = class(TObject)
    Nr: integer;
  end;
 
  TKind = class(TVater)
  end;
var
  Kind: TKind;
 
{ TForm1 }
 
procedure int(const i: integer);
begin
  i := 3;
end;
 
procedure SetNr(const obj: TVater; n: integer);
begin
  obj.Nr := n;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Kind := TKind.Create;
  SetNr(Kind, 1);
  Caption := IntToStr(Kind.Nr);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  ii: integer;
begin
  int(ii);
  Caption := IntToStr(ii);
end;         
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Classe in Procedure als Const deklariert

Beitrag von Socke »

Mathias hat geschrieben:Bei SetNr kann ich die Variable obj verändern.
Bei int kommt schon beim kompilieren ein Fehler.

Müsste bei SetNr kein Kompilerfehler kommen ?
Die Variable obj ist technisch gesehen nur ein Zeiger auf einen Berech im Arbeitsspeicher wo das Objekt selbst liegt. Den Zeiger kannst du nicht verändern (obj := TVater.Create;) - das Objekt selbst hingegen kann geändert werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6914
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Classe in Procedure als Const deklariert

Beitrag von Mathias »

Bin ich froh, das dies kein Bug ist, somit kann ich dies in meinem Programm ohne Probleme verwenden.

Danke!
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten