Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [D2010] Record darf nicht nil sein - E2010 Inkompatible Type (https://www.delphipraxis.net/143939-%5Bd2010%5D-record-darf-nicht-nil-sein-e2010-inkompatible-type.html)

s.h.a.r.k 26. Nov 2009 12:58


[D2010] Record darf nicht nil sein - E2010 Inkompatible Type
 
hallo zusammen,

seit neuestem verwende ich auch delphi 2010 und bin an einigen ecken auf die schnauze geflogen. nun wollte ich ein projekt aktualisieren und es eben reif für delphi 2010 machen, nur scheitere ich schon nach wenigen schritten. das was unter delphi 2007 noch ging, ist hier auf einmal ein fehler.

hier nun der code der das problem macht:

Delphi-Quellcode:
TImportDataRecord = record
{ hier stehen die einzelnen Datenfelder }
end;
TImportDataRecordItem = record
  Item : TImportDataRecord;
end;
PImportDataRecordItem = ^TImportDataRecordItem;


// weiter unten im programm ...

procedure ...;
var
  pIdR : PImportDataRecordItem;
begin
  { ... }
  pIdR.Item := nil;
  { ... }
end;
und hier der compiler-fehler:
Code:
[DCC Fehler] frameSynchronizeWizard.pas(583): E2010 Inkompatible Typen: 'TImportDataRecord' und 'Pointer'
mir ist schon klar, dass ich auch eine klasse nutzen könnte, aber das will ich nicht wirklich, denn das wirft zu viel durcheinander.

ps: diesen code verwende ich um daten in einem VirtualDrawTree anzeigen zu lassen.

mfg
der hai

Bernhard Geyer 26. Nov 2009 13:00

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
der Code dürfte in keiner Delphi-Version kompilierbar sein

Sollte der Code nicht eher so aussehen:
Delphi-Quellcode:
  pIdR := nil;

DeddyH 26. Nov 2009 13:05

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
Oder so?
Delphi-Quellcode:
PImportDataRecord = ^TImportDataRecord;
TImportDataRecord = record
{ hier stehen die einzelnen Datenfelder }
end;
TImportDataRecordItem = record
  Item : PImportDataRecord;
end;
PImportDataRecordItem = ^TImportDataRecordItem;


// weiter unten im programm ...

procedure ...;
var
  pIdR : PImportDataRecordItem;
begin
  { ... }
  pIdR^.Item := nil;
  { ... }
end;

BigAl 26. Nov 2009 13:36

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
Korrigiert mich wenn ich mich irre... Aber da sehe ich auf Anhieb mehrere Fehler:

Delphi-Quellcode:
TImportDataRecord = record
{ hier stehen die einzelnen Datenfelder }
end;
TImportDataRecordItem = record
  Item : TImportDataRecord;
end;
PImportDataRecordItem = ^TImportDataRecordItem;


// weiter unten im programm ...

procedure ...;
var
  pIdR : PImportDataRecordItem;
begin
  { ... }
  pIdR.Item := nil;
  { ... }
end
1. pIdr is ein "Bush"-Pointer, er zeigt also an keinen definierten Ort im Speicher
2. Item ist kein Pointer sondern vom Type "record" bzw. TImportDataRecord. Wie soll da ein Pointer zugewiesen werden?

Oder habe ich was verpasst?

Hat das der "alte" Compiler wirklich so gefressen?

Gruß
Alex

s.h.a.r.k 26. Nov 2009 14:17

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
danke für eure antworten. ich werde da mal etwas testen müssen :gruebel:

unter delphi 2007 war der code compilierbar, da bin ich mir (fast) sicher. je länger ich mir das problem allerdings anschaue, desto eher denke ich, dass bernhards lösung die gesuchte ist.

vielen dank jedenfalls schon mal!

Neutral General 26. Nov 2009 14:21

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
Zitat:

Zitat von s.h.a.r.k
danke für eure antworten. ich werde da mal etwas testen müssen :gruebel:

unter delphi 2007 war der code compilierbar, da bin ich mir (fast) sicher. je länger ich mir das problem allerdings anschaue, desto eher denke ich, dass bernhards lösung die gesuchte ist.

vielen dank jedenfalls schon mal!

Also mich würde es ehrlich gesagt wundern wenn das jemals geklappt haben sollte...
Habs grad in Delphi7 probiert und da ging es auch nicht

s.h.a.r.k 26. Nov 2009 14:42

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
ich wüsste aber nicht, dass ich an diesem code mal was geändert haben sollte :gruebel:

ich melde mich, wenn ich das problem gelöst habe... bin gerade selbst etwas verwirrt.

pertzschc 26. Nov 2009 16:09

Re: [D2010] Record darf nicht nil sein - E2010 Inkompatible
 
Zitat:

Zitat von s.h.a.r.k
ich wüsste aber nicht, dass ich an diesem code mal was geändert haben sollte

Frag einfach Dein Sourcecode-Management-System...


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