Autor Beitrag
HaRaH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Sa 12.02.05 21:25 
hi,
hm...hab gleich noch ein Problem mit TList
jetzt habe ich eine Liste MyList, und kann auf die Elemente per MyList.items[i] zugreifen.
Wenn ich jetzt einen Record definiert habe, der eine Variable enthält, - wie kann ich dann auf die Variable zugreifen, wenn ich den Pointer über MyList bekomme?

ich dachte an
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
...
    public
      MyList: TList;
...

  type TElement = record
    item : Integer;
  end;

...

var
  PToken : ^TToken;

...
procedure ...

for ...
  MyList.item[i]^.item := 3;


geht aber leider nicht. Der Debugger meint es gäbe überhaupt kein Objekt namens item. Kann mir jemand sagen, warum?

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.02.05 21:27 
ausblenden Delphi-Quelltext
1:
(MyList.Items[i]^ as TElement).Item := 3;					


AXMD
HaRaH Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Sa 12.02.05 21:32 
funktioniert leider nicht

Fehlermeldung:

Zitat:
[Fehler] Operator ist auf diesen Operandentyp nicht anwendbar


Benutze Delphi 2005, falls das jemandem irgendwie weiterhilft.

thx
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.02.05 21:33 
:autsch: Klar, du hast ja eine TList:

ausblenden Delphi-Quelltext
1:
TElement(MyList[i])^.Item := 3;					


ohne Items :autsch:

AXMD
HaRaH Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Sa 12.02.05 21:39 
funktioniet leider immer noch nicht :?!?:
wieso kann man überhaupt per MyList[i] auf Elemente der Liste zugreifen? Ich dachte, dass geht nur über MyList.Items[i] ?!

Bedeutet das TElement(...) Eine Typenspezifikation, oder sowas? Dass man dem Parser bzw. dem Compiler sagt, dass der folgende Pointer vom Typ TElement ist?
thx!
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.02.05 21:44 
HaRaH hat folgendes geschrieben:
Dass man dem Parser bzw. dem Compiler sagt, dass der folgende Pointer vom Typ TElement ist?


Ja. Hab grad kein Delphi bei der Hand, der Code müsste laut deinen Deklarationen eigentlich funktionieren...

AXMD
HaRaH Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Sa 12.02.05 21:49 
hab's rausgefunden. Der richtige Code lautet:

ausblenden Delphi-Quelltext
1:
TElement(MyList.items[i]).item					


Danke - allein wär ich da nicht draufgekommen.

Gruß MaX

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Sa 12.02.05 23:26 
HaRaH hat folgendes geschrieben:
hab's rausgefunden. Der richtige Code lautet:

ausblenden Delphi-Quelltext
1:
TElement(MyList.items[i]).item					


Danke - allein wär ich da nicht draufgekommen.
Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.


und das geht? das wäre mir neu.

normalerweise machts man so:
ausblenden Delphi-Quelltext
1:
PElement(MyList[i])^.item := 3;					

oder so hier:
ausblenden Delphi-Quelltext
1:
PElement(MyList.Items[i])^.item := 3;					
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 14.02.05 10:18 
HaRaH hat folgendes geschrieben:
wieso kann man überhaupt per MyList[i] auf Elemente der Liste zugreifen? Ich dachte, dass geht nur über MyList.Items[i] ?!

Das geht deshalb weil das Property Items als Default definiert wurde. Jede Klasse kann genau ein Default-Property definiert haben. Schau dir einfach mal die Unit Classes.pas an in der TList implementiert wurde. Da kannst du auch die Default Anweisung finden.

Gruß
Tino