Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi E2086 und E2004 (https://www.delphipraxis.net/204946-e2086-und-e2004.html)

Hobbycoder 16. Jul 2020 10:37

E2086 und E2004
 
Hi,

ich habe SQLDirect 6.5 und möchte diese nun unter 10.4 installieren. Unter 10.3 lief es.

Der Compiler zeigt mir folgenden Fehler : [dcc32 Fehler] SDCommon.pas(445): E2086 Typ 'TSDParam' ist nicht vollständig definiert

Codeauszug:
Delphi-Quellcode:
  TSDParam    = class; //<-- Hier kommt der Fehler
  TSDParams    = class;
  TSDParamType   = (ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult);

  TSDHelperParam    = TSDParam;
  TSDHelperParams    = TSDParams;
  TSDHelperParamType= TSDParamType;
Es handelt sich wohl um eine Forwarddeklaration, denn TDSParam wird weiter unten im Code als TPersistent wein weiteres mal deklariert.
Ich bekomme den Fehler nur weg, wenn ich das in
Delphi-Quellcode:
  TSDParam    = class(TObject);
  TSDParams    = class(TObject);
ändere, oder so
Delphi-Quellcode:
  TSDParam    = class

  end;
  TSDParams    = class

  end;
  TSDParamType   = (ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult);
dann scheint der compiler zufrieden.

Wie gesagt wird es weiter unten erneut deklariert, aber da kommt dann der Fehler: [dcc32 Fehler] SDCommon.pas(749): E2004 Bezeichner redeklariert: "TSDParam"
Dieser Code sieht folgendermaßen aus:
Delphi-Quellcode:
  TSDParam = class(TPersistent) //<-- Hier tritt der Fehler auf
  private
    .
    .
    .
  protected
    .
    .
    .
  public
    .
    .
    .
  end;
Das gleiche passiert bei TDSParams auch.

Warum muss ich bei der ersten Deklaration TObject (TPersistent geht auch) angeben?

Und warum wird die zweite Deklaration angemeckert?
Muss man das in 10.4 anders machen?

Sailor 16. Jul 2020 11:21

AW: E2086 und E2004
 
Zwischen der Forward-Deklaration "TSDParam = class" und der nachfolgenden Verwendung/Komplettierung darf kein weiteres TYPE-Keyword auftreten. Schau mal nach, wie das bei Dir aussieht.

Hobbycoder 16. Jul 2020 11:48

AW: E2086 und E2004
 
Ja, es war ein Type und ein Const dazwischen. Die Konstanten habe ich nach oben verschoben, und das Type entfernt. Habe aber immer noch E2004.

Was mich wundert: unter 10.3 funktionierte es.

Bernhard Geyer 16. Jul 2020 12:08

AW: E2086 und E2004
 
hast du die Include-Dateien aktualisiert?
Nicht das die Compilerversion nicht erkannt und falsche Units/Ableitungen/.... gezogen werden.

Hobbycoder 16. Jul 2020 12:21

AW: E2086 und E2004
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1469727)
hast du die Include-Dateien aktualisiert?
Nicht das die Compilerversion nicht erkannt und falsche Units/Ableitungen/.... gezogen werden.

Danke, das war's. An die Include hab ich gar nicht gedacht ;-)

azwa66 9. Okt 2020 11:29

AW: E2086 und E2004
 
Hallo, stehe gerade auch vor einer Portierung auf Delphi 10.4.1 und bekomme das mit SQLDirect 6.5 nicht hin. Kann mir mal einer bitte sagen wie das mit dem Ändern der Include-Dateien funktionieren soll, bzw. was ich da ändern muss.
Vielen Dank schon mal


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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