pl.comp.lang.delphi
[Top] [All Lists]

Re: Absolute

Subject: Re: Absolute
From: Andrzej Grażyński
Date: Sun, 13 Jul 2008 19:26:40 +0200
Newsgroups: pl.comp.lang.delphi


t0mek pisze:
Witam,
Problem ze słówkiem absolute:

type TCos=class
    Pole: Integer;
    function Nic: Byte;
    end;

function TCos.Nic: Byte;
var H: Integer absolute Pole;  //Tutaj błąd: Variable name expected
   J: Byte;
   C: Byte absolute J;
begin
Result:=5;
end;

Jak to poprawić?

Pozdrawiam,
t0mek

"Absolutować" można tylko zmienne relatywne do stosu (lokalne) lub globalne. W czasie kompilowania metody "Nic" atrybut Pole nie należy do tej kategorii, bo jego adres jest relatywny do zmiennej Self, której adres jest w czasie kompilacji nieokreślony, bo w różnych wywołaniach może być różny.

Jeżeli już koniecznie musisz nakładać zmienną lokalną na pole obiektu, to pozostają tylko pointery. Pobierasz adres pola i konstruujesz jego dereferencję w odpowiednim rzutowaniu. Na przykład w powyższym:


function TCos.Nic: Byte;
var
  HPtr: ^integer;

begin
  HPtr := Addr(Pole);
  ...
  HPtr^ := 10;
end;


Albo:

function TCos.Nic: Byte;
var
  XPtr: ^Single;

begin
  XPtr := Addr(Pole);
  ...
  XPtr^ := 11.5;
end;


Najważniejsze jest jednak w tym wszystkim pytanie - po co to wszystko?




<Prev in Thread] Current Thread [Next in Thread>
Privacy Policy