![]() |
TObjectList und Generics --> E2515
Hallo Jungs,
ich versuche mich gerade mit den Generics. Doch bis an hin leider erfolglos. Der Kompiler meint nur dazu
Code:
Kennt jemand das Problem und weiss jemand eine Lösung? Hier mein vergeblicher Versuch:
[DCC Fehler] Unit1.pas(42): E2515 Typparameter 'TKey' ist mit Typ 'TC1' nicht kompatibel
[DCC Fehler] Unit1.pas(55): E2010 Inkompatible Typen: 'TKey' und 'TObject' [DCC Fehler] Unit1.pas(64): E2515 Typparameter 'TKey' ist mit Typ 'TC1' nicht kompatibel [DCC Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Delphi-Quellcode:
:gruebel: Der Create scheint ihm gar nicht zu gefallen :gruebel:
type
TC1 = class aValue: string; end; tc2 = class aValue: string; end; tcl<TKey: class> = class(tObjectList) private function GetItem(Index: integer): TKey; procedure SetItem(Index: integer; const Value: TKey); public property Items[Index: integer]: TKey read GetItem write SetItem; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private l1: tcl<tc1>; l2: tcl<tc2>; end; var Form1: TForm1; implementation {$R *.dfm} function tcl<TKey>.GetItem(Index: integer): TKey; begin result := inherited items[index]; end; procedure tcl<TKey>.SetItem(Index: integer; const Value: TKey); begin inherited items[index] := value; end; procedure TForm1.FormCreate(Sender: TObject); begin l1 := tcl<tc1>.create; l2 := tcl<tc2>.create; end; procedure TForm1.FormDestroy(Sender: TObject); begin if l1 <> NIL then FreeAndnIL(l1); if l2 <> NIL then FreeAndNIL(l2); end; Vielen Dank schon Mal |
Re: TObjectList und Generics --> E2515
Versuchs mal mit "TKey: class, TObject", oder wie die Syntax dort auch sein mag ;)
|
Re: TObjectList und Generics --> E2515
Hallo DAX,
wenn ich hier:
Delphi-Quellcode:
noch TObject ergänze, ist zwar der Fehler weg, dafür gibt es dann leider einen neuen :? :
tcl<TKey: class, tObject> = class(tObjectList)
Code:
Hat noch jemand einen Tipp?
[DCC Fehler] Unit1.pas(23): E2510 Typ TObject' ist keine gültige Einschränkung
Grüße Euer Greeny |
Re: TObjectList und Generics --> E2515
Delphi-Quellcode:
tcl<TKey: class> = class( TObjectList<TKey>)
|
Re: TObjectList und Generics --> E2515
Der Compiler stört sich eindeutig an diesem Teil:
Delphi-Quellcode:
Wenn man die Zeile auskommentiert, ist auch der Fehler weg. Allerdings funktioniert
function tcl<TKey>.GetItem(Index: integer): TKey;
begin result := inherited items[index]; end;
Delphi-Quellcode:
leider auch nicht. Vielleicht ein Bug?
function tcl<TKey>.GetItem(Index: integer): TKey;
begin result := inherited items[index] as TKey; end; Ich frage mich allerdings auch, warum du nicht gleich die TObjectList<T: class> aus Generics.Collections verwendest. |
Re: TObjectList und Generics --> E2515
Zitat:
Delphi-Quellcode:
{$INLINE ON}
function KeyAsObject(const Key): TObject; inline; { Inline muss vorhanden sein, da der Compiler sonst Assembler-Schrott generiert } begin Result := TObject(Key); end; procedure ObjectAsKey(Value: TObject; var Key); inline; { Inline muss vorhanden sein, da der Compiler sonst Assembler-Schrott generiert } begin TObject(Key) := Value; end; function tcl<TKey>.GetItem(Index: Integer): TKey; begin ObjectAsKey(inherited Items[Index], Result); end; procedure tcl<TKey>.SetItem(Index: Integer; const Value: TKey); begin inherited Items[Index] := KeyAsObject(Value); end; Zitat:
|
Re: TObjectList und Generics --> E2515
Nein, nicht ganz, sondern weil ich die Generics.Collections bislang noch nicht kannte. Daneben dachte ich nicht, dass der Compiler noch so Buggy ist. So, mein erster Ausflug in das Reich der Generics viel somit gründlich in das Wasser :( .
Herzlichen Dank und noch einen schönen Abend. Schöne Grüsse Euer Greeny :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz