Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Override wird nicht akzeptiert unter D11 (https://www.delphipraxis.net/208731-override-wird-nicht-akzeptiert-unter-d11.html)

venice2 10. Sep 2021 21:32

Delphi-Version: 5

Override wird nicht akzeptiert unter D11
 
Ich habe ein Problem seit D11. War unter 10.4 nicht so!
Was soll denn da Unterschiedlich sein?

Delphi-Quellcode:
function TJsonBytesStream.Realloc(var NewCapacity: Longint): Pointer;
var
  L: Longint;
begin
  // bla, bla
end;
Delphi-Quellcode:
  {$IFDEF SUPPORTS_UTF8STRING}
  TJsonUTF8StringStream = class(TMemoryStream)
  private
    FDataString: UTF8String;
  protected
    function Realloc(var NewCapacity: Longint): Pointer; override;
  public
    constructor Create;
    property DataString: UTF8String read FDataString;
  end;
  {$ENDIF SUPPORTS_UTF8STRING}

  TJsonBytesStream = class(TMemoryStream)
  private
    FBytes: TBytes;
  protected
    function Realloc(var NewCapacity: Longint): Pointer; override;
  public
    constructor Create;
    property Bytes: TBytes read FBytes;
  end;
Zitat:

[dcc64 Fehler] JsonDataObjects.pas(1081): E2037 Deklaration von 'Realloc' unterscheidet sich von vorheriger Deklaration
Deaktiviere ich override kommt die Warnung[dcc64 Warnung]
Zitat:

JsonDataObjects.pas(1092): W1010 Methode 'Realloc' verbirgt virtuelle Methode vom Basistyp 'TMemoryStream'
So würde es gehn..
Delphi-Quellcode:
function Realloc(var NewCapacity: Longint): Pointer; reintroduce; overload;


Welcher Unterschied ist aber nun zur vorherigen version? bzw. welche Auswirkungen hat das?
Delphi-Quellcode:
function Realloc(var NewCapacity: Longint): Pointer; override;


So wie ich das verstehe habe ich ja 2 die gleichen functionen..
Einmal für UTF8String und einmal ohne deshalb muß diese überschrieben werden damit ich beide abhängig vom UTF8String verwenden kann.
Ist das mit reintroduce; overload; überhaupt noch gewährt?

Warum wurde override unter 10.4 anstandslos akzeptiert?

TurboMagic 10. Sep 2021 21:58

AW: Override wird nicht akzeptiert unter D11
 
Da ich D11.0 gerade erst installiere kann ich nicht prüfen ob die von dir als Quelltext gezeigten
Klassen aus der RTL sind oder von dir selber.

Aber: wenn's bei Override einen Compilerfehler gibt musst du dir mal die Deklaration dessen,
was du überschreiben willst anschauen.

jaenicke 10. Sep 2021 22:01

AW: Override wird nicht akzeptiert unter D11
 
Zitat:

Zitat von venice2 (Beitrag 1494521)
Ich habe ein Problem seit D11. War unter 10.4 nicht so!
Was soll denn da Unterschiedlich sein?

Ein Blick in den Quelltext zeigt, dass NewCapacity nun ein NativeInt ist...

venice2 10. Sep 2021 22:04

AW: Override wird nicht akzeptiert unter D11
 
Zitat:

Zitat von TurboMagic (Beitrag 1494523)
Da ich D11.0 gerade erst installiere kann ich nicht prüfen ob die von dir als Quelltext gezeigten
Klassen aus der RTL sind oder von dir selber.

Aber: wenn's bei Override einen Compilerfehler gibt musst du dir mal die Deklaration dessen,
was du überschreiben willst anschauen.

JsonDataObjects.
Problem wurde gefixt für D11

Zitat:

Ein Blick in den Quelltext zeigt, dass NewCapacity nun ein NativeInt ist...
Danke euch habe es auch gerade gesehen und es scheint die alte Kompatibilität erhalten zu sein.
Und es wurde auf Overload umgelegt.

himitsu 10. Sep 2021 23:02

AW: Override wird nicht akzeptiert unter D11
 
Zitat:

Zitat von jaenicke (Beitrag 1494525)
Ein Blick in den Quelltext zeigt, dass NewCapacity nun ein NativeInt ist...

Hab mal tiefer nachgesehn.

dynamische Arrays können die 2 GB überschreiten (64 Bit da NativeInt, siehe TDynArrayRec und DynArraySetLength)

Aber StrRec und SetLength für Strings sind weiterhin Integer und somit unter 2 GB, bzw. unter 1 Milliarde Zeichen.
Somit sind LongStrings und DynArrays nun endgültig inkompatibel, in ihrer hauptsächlichen Speicherstruktur. :(


Allerdings zeigt CodeInsight weiterhin "Integer" für den NewLength-Parameter im SetLength an, was schon bissl blöd/irreführend ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.

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