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