Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Abstrakter Fehler bei Instanzenübergabe (https://www.delphipraxis.net/73556-abstrakter-fehler-bei-instanzenuebergabe.html)

faux 19. Jul 2006 20:04


Abstrakter Fehler bei Instanzenübergabe
 
Hallo!

Ich habe folgenden Code:
Delphi-Quellcode:
procedure Add(var List: TStrings);
begin
  List.Add('Value');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStrings;
begin
  List := TStrings.Create;
  Add(List);
  List.Free;
end;
Hier tritt in Zeile 3 ein Abstrakter Fehler auf. Aber wieso? :gruebel:
Könnte mir das jemand erklären und auch ev. eine Lösung des Problems posten?

Danke schon mal.
Grüße
Faux

mkinzler 19. Jul 2006 20:07

Re: Abstrakter Fehler bei Instanzenübergabe
 
Der Fehler liegt in Zeile 10: TStrings ist abstrakt müßte etwa so heißen:
Delphi-Quellcode:
List := TStringList.Create;

faux 19. Jul 2006 20:09

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Zitat von mkinzler
Der Fehler liegt in Zeile 10: TStrings ist abstrakt müßte etwa so heißen:
Delphi-Quellcode:
List := TStringList.Create;

Ah! Danke! Es funktioniert. :)

Grüße
Faux

Dax 19. Jul 2006 20:13

Re: Abstrakter Fehler bei Instanzenübergabe
 
Manche sehen es auch gern als Bug von Delphi an, überhaupt Instanzen mit abstrakten Methoden (mehr kann bei Delphi ja nicht abstrakt sein :mrgreen:) zu erlauben...

mkinzler 19. Jul 2006 20:17

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Zitat von Dax
Manche sehen es auch gern als Bug von Delphi an, überhaupt Instanzen mit abstrakten Methoden (mehr kann bei Delphi ja nicht abstrakt sein :mrgreen:) zu erlauben...

Was außer Methoden kann noch abstrakt sein? Aber du hast recht, eigentlich müßte der fehler schon beim Instantiieren kommen.

Khabarakh 19. Jul 2006 20:27

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Zitat von mkinzler
Zitat:

Zitat von Dax
Manche sehen es auch gern als Bug von Delphi an, überhaupt Instanzen mit abstrakten Methoden (mehr kann bei Delphi ja nicht abstrakt sein :mrgreen:) zu erlauben...

Was außer Methoden kann noch abstrakt sein?

Nun ja, eben ganze Klassen ;) . Soll heißen, solange mindestens eine Methode noch abstrakt ist, muss die gesamte Klasse als abstrakt gekennzeichnet werden (wie es bei vielen Sprachen der Fall ist). Dann würde auch schon der Compiler und nicht erst die Runtime einen Fehler melden.

PS: Einen Bug würde ich das nicht nennen, schließlich verhält es sich "As Designed". Bezeichnen wir es lieber als - ehm - kleine Designschwäche :mrgreen: .

mkinzler 19. Jul 2006 20:42

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Nun ja, eben ganze Klassen Wink .
Laut Theorie ist eine klasse abstrakt, wenn mindestens eine Methode abstrakt ist, daß ist klar. Delphi unterscheidet halt noch zwischen abstrakt und vollständig abstrakt. Von normalen abstrakte Klassen (Klassen mit nicht-abstrakten Methoden) lassen sich Intanzen bilden. Andere Sprachen verweigern dies.

Zitat:

Zitat von mkinzler
Was außer Methoden kann noch abstrakt sein?

bezog sich auf
Zitat:

(mehr kann bei Delphi ja nicht abstrakt sein Mr. Green)

Dax 19. Jul 2006 20:54

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Zitat von mkinzler
Was außer Methoden kann noch abstrakt sein?

Properties - wenn man von Delphi weggeht und sich zb. Chrome ankuckt. Dort gehen auch so nette Sachen wie
Delphi-Quellcode:
property Foo: string; read; abstract;

Ralf Kaiser 19. Jul 2006 21:00

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Zitat von Dax
Manche sehen es auch gern als Bug von Delphi an, überhaupt Instanzen mit abstrakten Methoden (mehr kann bei Delphi ja nicht abstrakt sein :mrgreen:) zu erlauben...

Hi,

reichen dir diese Warnungen nicht wenn du eine Instanz einer abstrakten Klasse erzeugst??

Code

Delphi-Quellcode:
procedure TForm1.Test;
var s: TStrings;
begin
  inherited;
  s := TStrings.Create;
end;
Was der Compiler dazu sagt:

Delphi-Quellcode:
[Warning] Form1.pas(43): W1020 Constructing instance of 'TStrings' containing abstract method 'TStrings.Get'
[Warning] Form1.pas(43): W1020 Constructing instance of 'TStrings' containing abstract method TStrings.GetCount'
[Warning] Form1.pas(43): W1020 Constructing instance of 'TStrings' containing abstract method 'TStrings.Clear'
[Warning] Form1.pas(43): W1020 Constructing instance of 'TStrings' containing abstract method 'TStrings.Delete'
[Warning] Form1.pas(43): W1020 Constructing instance of 'TStrings' containing abstract method 'TStrings.Insert'
Man sollte sich die Warnungen die der Compiler ausspuckt auch durchlesen und zu Herzen nehmen :-D

Ciao,
Ralf

Dax 19. Jul 2006 21:04

Re: Abstrakter Fehler bei Instanzenübergabe
 
Zitat:

Zitat von Alfi001
reichen dir diese Warnungen nicht wenn du eine Instanz einer abstrakten Klasse erzeugst??

Nö. Warnungen kann man ignorieren, Compilerfehler nicht ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz