AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abstrakter Fehler bei Instanzenübergabe

Ein Thema von faux · begonnen am 19. Jul 2006 · letzter Beitrag vom 20. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:04
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?
Könnte mir das jemand erklären und auch ev. eine Lösung des Problems posten?

Danke schon mal.
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:07
Der Fehler liegt in Zeile 10: TStrings ist abstrakt müßte etwa so heißen:
List := TStringList.Create;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:09
Zitat von mkinzler:
Der Fehler liegt in Zeile 10: TStrings ist abstrakt müßte etwa so heißen:
List := TStringList.Create;
Ah! Danke! Es funktioniert.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:13
Manche sehen es auch gern als Bug von Delphi an, überhaupt Instanzen mit abstrakten Methoden (mehr kann bei Delphi ja nicht abstrakt sein ) zu erlauben...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:17
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 ) zu erlauben...
Was außer Methoden kann noch abstrakt sein? Aber du hast recht, eigentlich müßte der fehler schon beim Instantiieren kommen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:27
Zitat von mkinzler:
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 ) 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 .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:42
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 von mkinzler:
Was außer Methoden kann noch abstrakt sein?
bezog sich auf
Zitat:
(mehr kann bei Delphi ja nicht abstrakt sein Mr. Green)
Markus Kinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 20:54
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 wieproperty Foo: string; read; abstract;
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 21:00
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 ) 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

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Abstrakter Fehler bei Instanzenübergabe

  Alt 19. Jul 2006, 21:04
Zitat von Alfi001:
reichen dir diese Warnungen nicht wenn du eine Instanz einer abstrakten Klasse erzeugst??
Nö. Warnungen kann man ignorieren, Compilerfehler nicht
  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 20:19 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