![]() |
Datei finden führt zu abstraktem Fehler
Hallo nochmal an alle,
Ich möchte eine Datei auf meiner Festplatte finden. Dazu verwende ich folgenden Quellcode aus der ![]() hier mein Quellcode:
Delphi-Quellcode:
und der Aufruf im Constructor:
procedure TDateiArbeit.FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin RootFolder := IncludeTrailingPathDelimiter(RootFolder); if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin FileList.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end;
Delphi-Quellcode:
Die Fehlermeldung lautet einfach nur: "Abstrakter Fehler" in einer MessageBox bevor die Form erscheint. Weis jemand, was dort falsch ist?
constructor TDateiArbeit.create(const sText: string);
begin inherited create; FsDateiname := sText; if IsFileName then //IsFileName ist eine Überprüfung der Gültigkeit des übergebenden Strings als Dateiname (auch hier aus der DP) begin FtsPfad := TStrings.Create; FindAllFiles(FtsPfad,'d:',FsDateiname, true); end; end; Vielen Dank BAMatze |
Re: Datei finden führt zu abstraktem Fehler
Du versuchst eine Instanz von TStrings zu erstellen, das geht aber nicht. Nimm TStringList. TStrings ist nur die abstrakte Elternklasse.
Eine entsprechende Warnung sollte der Compiler auch anzeigen... :roll: |
Re: Datei finden führt zu abstraktem Fehler
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ps.: Änderung in TStringList ist die Lösung Danke @jeanicke nochmal |
Re: Datei finden führt zu abstraktem Fehler
Da steht ja, dass du eine Instanz einer Klasse mit abstrakten Methoden erstellst. Und das geht eben nicht. ;-)
|
Re: Datei finden führt zu abstraktem Fehler
Zitat:
|
Re: Datei finden führt zu abstraktem Fehler
Warnungen sollte man schon beachten, dazu sollte auch in der Hilfe stehen was die bedeuten.
Hinweise sind oft nur Hinweise. Dass z.B. eine Variable deklariert, aber nicht verwendet wird, ist z.B. nicht weiter schlimm. Die kann man ggf. ignorieren. Bei Warnungen ist das fast immer nicht so gut. // EDIT: Ich hoffe dir ist klar was abstrakt bedeutet? |
Re: Datei finden führt zu abstraktem Fehler
Zitat:
|
Re: Datei finden führt zu abstraktem Fehler
Abstrakt bedeutet, dass du nur den Methodenrumpf schreibst mit "virtual; abstract;" dahinter. In dieser Klasse schreibst du dazu dann keinen Code. In einer abgeleiteten Klasse (wie TStringList) werden diese Methoden dann überschrieben und "mit Leben gefüllt". Erst da ist also der Code dazu vorhanden.
Da die alle von TStrings abgeleitet sind, kannst du sie auch als TStrings verwenden und auch in Variablen von Dem Typ packen. Aber eine Instanz von TStrings selbst enthielte nicht allen notwendigen Code zu den Methoden. |
Re: Datei finden führt zu abstraktem Fehler
Abstrakt bedeutet grob, dass die Methodne (zumindest manche) einer Klasse nur deklariert wurden, aber nicht implementiert. Diese Methoden sind dafür da, von Nachfahren überschrieben zu werden. So kann das TImage z.B. um beliebige Bildformate erweitert werden, ohne dass das TImage selbst verändert werden muss. Denn TImage kennt nur die abstrakte Klasse TGraphic, weiß also welche Methoden es gibt, und welche Parameter sie erwarten. Erst wenn man der Graphic des TImage z.B. ein TBitmap zuweist beinhalten diese Methoden auch tatsächlich Code. Wenn man jedoch die abstrakte Basisklasse TGraühic direkt verwenden würde, würden die Methoden ins Nirvana zeigen -> abstrakter Fehler.
|
Re: Datei finden führt zu abstraktem Fehler
Eine abstrakte Klasse ist eine Klasse, die dazu designed wurde, dass man von ihr ableiten muss. Sie definiert bestimmte Methoden als abstrakt - sie sind definiert, aber nicht implementiert. Eine Klasse die man instanzieren will und die von dieser Basisklasse ableitet, muss diese abstrakten Methoden auch alle implementieren. Erst dann ist die Klasse komplett und kann wirklich benutzt werden.
Die Idee hinter dem Konzept ist, dass man in seinem Code zwar auf einer Variablen vom Typ TStrings arbeiten kann (solange man TStrings nicht direkt instanziert), sich dahinter aber eine TStringList, TMyStringList oder auch TWrdlbrmpftStrings verstecken kann, ohne dass man deren Implementierungsdetails kennen müsste. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz