ich habe gerade als ich an einem OpenGl projekt Gearbeitet habe ein merkwürdiges Verhalten von Pointern festgestellt. (keine OpenGL kentnisse notwendig.)
Ich habe folgenden Quellcode
Code: Alles auswählen
PTOctTree = ^TOctTree;
TOctTreeNode = class
Trees: array [0..1,0..1,0..1] of PTOctTree;
procedure Start;
end;
TOctTree = class
//... unimportant informations...
node:TOctTreeNode; // if node = nil then last OctTree
end;
Meine Start procedure sieht so aus
Code: Alles auswählen
procedure TOctTreeNode.Start;
var
x,y,z:integer;
puf:TOctTree;
begin
for x := 0 to 1 do
begin
for y := 0 to 1 do
begin
for z := 0 to 1 do
begin
puf := TOctTree.Create;
Trees[x,y,z] := @puf;
end;
end;
end;
end;
Code: Alles auswählen
procedure TOctTreeNode.Start;
var
x,y,z:integer;
begin
for x := 0 to 1 do
begin
for y := 0 to 1 do
begin
for z := 0 to 1 do
begin
// Tree wird direkt zugewiesen
Trees[x,y,z] := @TOctTree.Create;
end;
end;
end;
end;
Code: Alles auswählen
Error: Incompatible types: got "<address of function:TObject of object;Register>" expected "PTOctTree"
Lazarus 0.9.29
SVN 28808
FPC 2.4.3
Datum 23.12.10
Windows XP SP3