Bonjour
Je viens de remarquer un comportement bizarre du compilateur avec Tlist et la façon d’accéder à un élément de la liste
Le code d'exemple
J'ai une erreur du compilateur des que je tente d'accéder à un élément soit via un chiffre directement ou une variable de type integer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type tmonobjet = class(tobject) fstrNom : string; fstrDescription : string; end; tmaliste = class (tlist) protected function Get(Index: longword): tmonobjet; procedure Put(Index: longword; Item: tmonobjet); public function Add(Item: tmonobjet): int64; procedure Clear;override; procedure Delete(Index: longword); procedure Remove(index : longword); property items[Index: longword]: tmonobjet read Get write Put; default; constructor Create ;overload; destructor Destroy ;override; end; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var uneListe : tmaliste; unObjet : tmonobjet; index : longword; index2 : integer; begin uneliste := tmaliste.Create; unObjet := tmonobjet.Create; unObjet.fstrNom :='object'; unObjet.fstrDescription := 'description object'; uneliste.Add(unobjet); index := 1; caption := uneliste[index].fstrnom; caption := uneliste[index2].fstrnom; // <- erreur caption := uneliste[1].fstrnom; // <- erreur uneliste.Free end; { tmaliste } function tmaliste.Add(Item: tmonobjet): int64; begin result := inherited add(item); end; procedure tmaliste.Clear; begin While (Count>0) do Delete(Count-1); end; constructor tmaliste.Create; begin inherited Create; end; procedure tmaliste.Delete(Index: longword); var tTemp : tmonobjet; begin tTemp:=Get(Index); inherited Delete(Index); if assigned(tTemp) then tTemp.free; end; destructor tmaliste.Destroy; begin clear; inherited; end; function tmaliste.Get(Index: longword): tmonobjet; begin result := tmonobjet ( inherited items[index] ); end; procedure tmaliste.Put(Index: longword; Item: tmonobjet); var tTemp : tmonobjet; begin tTemp := get(index); inherited put(index,item); if assigned (tTemp) then tTemp.free; end; procedure tmaliste.Remove(index: longword); begin inherited Delete(Index); end; end.
[dcc32 Erreur] Unit1.pas(59): E2018 Type Record, Object ou Class requis
cela serait il lié au fait que j'ai déclaré items avec un index de type longword ?
je me rends compte en écrivant que cela ne doit pas forcement bien marcher si je dépasse les 2147483647 éléments dans ma liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part property items[Index: longword]: tmonobjet read Get write Put; default;
car tlist gère les élément avec index de type integer
Partager