AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Override wird nicht akzeptiert unter D11

Ein Thema von venice2 · begonnen am 10. Sep 2021 · letzter Beitrag vom 11. Sep 2021
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

Override wird nicht akzeptiert unter D11

  Alt 10. Sep 2021, 22:32
Delphi-Version: 5
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..
function Realloc(var NewCapacity: Longint): Pointer; reintroduce; overload;

Welcher Unterschied ist aber nun zur vorherigen version? bzw. welche Auswirkungen hat das?
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?

Geändert von venice2 (10. Sep 2021 um 22:49 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#2

AW: Override wird nicht akzeptiert unter D11

  Alt 10. Sep 2021, 22:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Override wird nicht akzeptiert unter D11

  Alt 10. Sep 2021, 23:01
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: Override wird nicht akzeptiert unter D11

  Alt 10. Sep 2021, 23:04
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.

Geändert von venice2 (10. Sep 2021 um 23:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Override wird nicht akzeptiert unter D11

  Alt 11. Sep 2021, 00:02
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.
$2B or not $2B

Geändert von himitsu (11. Sep 2021 um 00:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 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