AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Typ 'xxx' benötigt Finalization - nicht im Dateityp erlaub
Thema durchsuchen
Ansicht
Themen-Optionen

Typ 'xxx' benötigt Finalization - nicht im Dateityp erlaub

Ein Thema von TheMiller · begonnen am 26. Mai 2004 · letzter Beitrag vom 26. Mai 2004
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Typ 'xxx' benötigt Finalization - nicht im Dateityp erlaub

  Alt 26. Mai 2004, 12:50
Hey Leute,

bin grade ein bissl am Üben mit Records. Was bedeutet folgende Meldung?

Compiler: Typ 'TToDo' benötigt Finalization - nicht im Dateityp erlaubt
So sehen meine Deklarationen aus:

Delphi-Quellcode:
type
  TToDo=record
  Name,Text:widestring;
  Datum:TDate;
  Active:Integer;
end;

...

  private
    RToDo:TToDo;
    recnow:Integer;
    DataFile:File of TToDo; <---- Hier meckert der Compiler!!!
    procedure LoadData;
    procedure AddData;
Was ist das für ein Fehler?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Typ 'xxx' benötigt Finalization - nicht im Dateityp erla

  Alt 26. Mai 2004, 12:59
Zitat von DJ-SPM:
Was ist das für ein Fehler?
Ich vergess es auch immer wieder, aber auch bei Compiler-Fehlern hilft ein beherzter Griff zur F1-Taste!

Zitat von Delphi-Hilfe:
Bestimmte Typen werden vom Compiler intern auf besondere Weise behandelt: Sie müssen zuerst ordnungsgemäß abgeschlossen werden, damit gegebenenfalls die gesamten von ihnen zur Zeit belegten Ressourcen freigegeben werden. Da der Compiler nicht feststellen kann, welcher Typ zur Laufzeit in dem Variantabschnitt eines Datensatzes gespeichert ist, kann nicht garantiert werden, daß diese speziellen Datentypen ordnungsgemäß abgeschlossen werden.
Delphi-Quellcode:
program Produce;

  type
    Data = record
      name : string;
    end;

  var
    inFile : file of Data;

begin
end.
String ist einer der Typen, für die ein besonderer Abschluß durchgeführt werden muß, und kann daher nicht in einem Dateityp gespeichert werden.
Delphi-Quellcode:
program Solve;

  type
    Data = record
      name : array [1..25] of Char;
    end;

  var
    inFile : file of Data;

begin
end.
Eine einfache Lösung für String ist die Neudeklaration des Typs als Array mit Zeichen. In anderen Fällen, in denen ein besonderer Abschluß durchgeführt werden muß, wird es immer schwieriger, eine binäre Dateistruktur mit Standard-Pascal-Merkmalen wie "file of" aufrechtzuerhalten. In diesen Situationen ist es wahrscheinlich einfacher, spezialisierte Datei-I/O-Routinen zu schreiben.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Typ 'xxx' benötigt Finalization - nicht im Dateityp erla

  Alt 26. Mai 2004, 13:06
Danke. Werde ich demnächst machen.

aber dann gleich noch eine Frage. Ich habe jetzt kein Array genommen, sondern String[500]. Da sagt er mir, dass ein String nur 255 Zeichen hat. Ich denke das ist bei shortstring.

jedenfalls habe ich jetzt string[255] stehen und es funzt. Wie kann ich den String verlängern (wenn möglich ohne array)?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Typ 'xxx' benötigt Finalization - nicht im Dateityp erla

  Alt 26. Mai 2004, 14:14
Moin!

Gar nicht. Ein AnsiString/WideString sind intern Klassen und die können keine feste Länge haben, da es keine Array Of Char mehr sind. Du kannst einen String[x] nur definieren, wenn x bis maximal 255 geht, weil er nur in dem Falle einen ShortString nehmen kann und begrenzt. Daher musst du entweder einen WideString/AnsiString nehmen und dann ordentlich mit Initialize/Finalize arbeiten. Dabei musst du aber beachten, das diese beiden String Typen nicht direkt als Record oder File Of XXX gelesen oder geschrieben werden können, da es intern wie oben geschrieben Klasseninstanzen sind und du somit nur die Adresse der Instanz, nicht aber die Daten schreibst. Diese String Definitionen sind nur 4 Byte in der Grösse, da Instanzenzeiger...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Typ 'xxx' benötigt Finalization - nicht im Dateityp erla

  Alt 26. Mai 2004, 14:18
Zitat:
Ein AnsiString/WideString sind intern Klassen
Naja, Klassen sind es nicht gerade, aber es sind dynamische Datenstrukturen die eben ihren Speicherplatz dynamisch verwalten. Sogesehen ist eine Variable vom Type Strign/WideString nichts anderes als ein Pointer auf einen dynamisch allozierten Speicherbereich. Nun, in einem Record verbraucht ein Pointer nur 4 Bytes. Wird dieser Record 1 zu 1 gespeichert, was bei einem type File of Record, der Fall wäre dann speichert man nur die Zeiger in den Speicherbereich. Sowas würde in der Laderoutine eben NICHT den INHALT des Strings laden, sondern einen unsinnigen Zeiger.

Gruß Hagen
  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 03:47 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