AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Datei finden führt zu abstraktem Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Datei finden führt zu abstraktem Fehler

Ein Thema von BAMatze · begonnen am 25. Mai 2009 · letzter Beitrag vom 25. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:33
Hallo nochmal an alle,

Ich möchte eine Datei auf meiner Festplatte finden. Dazu verwende ich folgenden Quellcode aus der CodeLibrary (ich weiß ist nicht der Link zur Library sondern in einen Threat, wo schonmal Fehler dazu aufgetreten sind)

hier mein Quellcode:
Delphi-Quellcode:
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;
und der Aufruf im Constructor:
Delphi-Quellcode:
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;
Die Fehlermeldung lautet einfach nur: "Abstrakter Fehler" in einer MessageBox bevor die Form erscheint. Weis jemand, was dort falsch ist?

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

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

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:37
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...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:43
Zitat von jaenicke:
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...
Hab mal die Warnungsliste angehängt, hab dort nämlich eigentlich keine Warnungen gesehen, die zu einem Fehler führen könnten. oder sind die Warnungen #2-#6, welche ich falsch interpretiert habe?

Ps.: Änderung in TStringList ist die Lösung Danke @jeanicke nochmal
Miniaturansicht angehängter Grafiken
warnungen_123.jpg  
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

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

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:43
Da steht ja, dass du eine Instanz einer Klasse mit abstrakten Methoden erstellst. Und das geht eben nicht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:44
Zitat von jaenicke:
Da steht ja, dass du eine Instanz einer Klasse mit abstrakten Methoden erstellst. Und das geht eben nicht.
Thx
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

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

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:46
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?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 14:59
Zitat von jaenicke:
// EDIT:
Ich hoffe dir ist klar was abstrakt bedeutet?
Hmm das muss ich leider verneinen. Bei solchen Problemen stehe ich meistens noch ziemlich dumm da und weiß nicht weiter. Probiere zwar dann immer etwas rum und schaue hier in der DP und Google, ob das Problem schonmal aufgetaucht ist und ne Lösung vorhanden, aber leider entziehen sich solche Fehler immer noch meinem Verständnis ohne Erklärung.
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

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

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 15:03
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 15:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#10

Re: Datei finden führt zu abstraktem Fehler

  Alt 25. Mai 2009, 15:08
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07: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