Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Generics nicht in SubRecords verfügbar. (https://www.delphipraxis.net/154469-generics-nicht-subrecords-verfuegbar.html)

himitsu 12. Sep 2010 09:20


Generics nicht in SubRecords verfügbar.
 
Delphi-Quellcode:
Type
  TRepleacer<Str> = Record
  Private
    _Data: Array[-1..255] of Record
              Pos, Len: Integer;
              S:       Str;
            End;
    _Count: Integer;
    _S:    ^Str;
  Public
    Procedure Initialize(Var S: Str);
    Procedure Repleace(Pos, Len: Integer; Const S: Str; Var DoOffset: Integer);
    Function Finalize: Integer{Offset};
  End;
Bei Diesem meckert der Compiler folgender Maßen rum, in der Zeile
Delphi-Quellcode:
S: Str;
:
Zitat:

[DCC Fehler] RegEx.pas(232): E2029 '(' erwartet, aber ';' gefunden
So wie es aussieht will er hier die Prozedur Delphi-Referenz durchsuchenStr erkannt haben.
Wie um himmels Willen kommt der Compiler darauf?
Dieses ist doch in 'ner "Deklaration" zu finden und steht nicht irgendwo im "Code".

Nja, also einfach umbenannt und schon kommt
Zitat:

[DCC Fehler] RegEx.pas(232): E2003 Undeklarierter Bezeichner: 'GenStr'
Ahhh, jetzt isses klar, der generische Typ wird einfach nicht weitergereicht.
Wieso nicht? :evil:

Und ja, ich werde jetzt den Record noch in einen weiteren generischen Typen verfrachten und hoffen es geht dann, aber muß denn immer alles so umständlich sein? :cry:

USchuster 12. Sep 2010 13:39

AW: Genericks nicht in SubRecords verfügbar.
 
Typparameter funktionieren offenbar nicht in anonymen Subrecords und Du kannst gern dafür einen QC Eintrag anlegen. Im Delphi.NET, welches immer für einen Vergleich gut ist, funktioniert dies auch nicht.

Zitat:

So wie es aussieht will er hier die Prozedur Str erkannt haben.
Wie um himmels Willen kommt der Compiler darauf?
Str ist eine eingebaute Prozedur und ein anderes Verhalten im Vergleich zu normalen (im Quelltext definierten) Prozeduren wundert mich daher nicht. Die Verwendung einer normale Prozedur führt korrekterweise zum Fehler E2007.

Ändere am besten den Code nach
Delphi-Quellcode:
  TReplacer<T> = record
  private
    type
      TData = array [-1..255] of record
        Pos, Len: Integer;
        S: T;
      end;
    var
      _Data: TData;
      _Count: Integer;
      _S: ^T;
  end;
Ich denke das war's was Du mit
Zitat:

Und ja, ich werde jetzt den Record noch in einen weiteren generischen Typen verfrachten und hoffen es geht dann, aber muß denn immer alles so umständlich sein?
meinst? Oder etwa nicht?

himitsu 12. Sep 2010 14:21

AW: Genericks nicht in SubRecords verfügbar.
 
OK, immerhin ein bissl besser, als mein doppelter Generic. :stupid:
Delphi-Quellcode:
TReplacer<T> = record
  type
    TData<T2> = array [-1..255] of record
      Pos, Len: Integer;
      S: T2;
    end;
  var
    _Data: TData<T>;
    _Count: Integer;
    _S: ^T;
end;
Wenn ich jetzt noch das generische Stringproblem hinbekomm, dann isses fast ideal.

Dezipaitor 12. Sep 2010 21:26

AW: Genericks nicht in SubRecords verfügbar.
 
Wenn der QC Eintrag dann gelöst ist, kannst du DelphiX2 kaufen, damit es funktioniert :)

Namenloser 12. Sep 2010 21:32

AW: Genericks nicht in SubRecords verfügbar.
 
[OT]Da ist ein K zu viel in der Überschrift.[/OT]

himitsu 12. Sep 2010 21:35

AW: Generics nicht in SubRecords verfügbar.
 
Wo? :roll:

Nja, fehlerhafte Dinge darf man auch mit Fehlern schreiben. :stupid:

mkinzler 12. Sep 2010 21:41

AW: Generics nicht in SubRecords verfügbar.
 
Frank verwendet halt eine kreative Rechtschreibung

himitsu 13. Sep 2010 02:53

AW: Generics nicht in SubRecords verfügbar.
 
Ein bissl Individualität kann nie schaden. :angel2:


Ich versteh die Genericks "manchmal" nicht.

Jetzt sind och noch generische Konstruktoren verboten.
Zitat:

[DCC Fehler] RegEx.pas(654): E2528 Typparameter sind bei dieser Methode nicht erlaubt
Was für einen Sch*** haben die da eigentlich zusammengebastelt. :wall:

himitsu 13. Sep 2010 15:28

AW: Generics nicht in SubRecords verfügbar.
 
@USchuster:
Nee, ich glaub ich nehm doch eine externe Variante.

Nachdem ich jetzt die Unit umgebaut und wieder kompilierbar hatte, da kam dieses raus:
Delphi-Quellcode:
[DCC Fataler Fehler] RegEx.pas(4250): F2084 Interner Fehler: URW1111
Allerdings meldete sich der Compiler hier erst nach dem End. und ich brauchte eine Weile um es auf diese Zeilen zurückzuführen.


nun sieht es also so aus
Delphi-Quellcode:
TReplacerData<Str> = Array[-1..1024] of Record
  Pos, Len: Integer;
  S:       Str;
End;
TReplacer<Str> = Record
Private
  _Data: TReplacerData<Str>;
  _Count: Integer;
  _S:    ^Str;
Public
  Procedure Initialize(Var S: Str);
  Procedure Repleace(Pos, Len: Integer; Const S: Str; Var DoOffset: Integer);
  Function Finalize: Integer{Offset};
End;
TReplacer  = TReplacer<String>;
TReplacerCP = TReplacer<CPString>;

Stevie 13. Sep 2010 18:50

AW: Generics nicht in SubRecords verfügbar.
 
Pointer auf generische Typparameter gehen nicht, warum erklärt Barry Kelly hier (erster Kommentar)

P.S.: Nen Tip: Vergiss Delphi 2010 für solche abenteuerlichen Generic Versuche, das bringt nur Ärger (ich spreche aus Erfahrung)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz