Autor Beitrag
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mi 22.03.06 18:21 
Hallo Leute,

Ich hab mal wieder ein Problem:
Ich möchte eine bessere Rechenmaschine bauen, die einene string ausrechenen kann.
Dazu brauche ich ein eigenes Objekt, dass die Methoden und Variablen verwaltet.
Das Objekt hat in vereinfachter Form drei Stringlisten vo TStrings. Im Konstruktor muss ich eine Instanz von ihnen erstellen. Da ist der Fehler: "EAbstractError", weil ich eine Abstracte Methode aufgerufen habe.
Wie kann ich diesen Fehler verhindern und endlich weiterprogrammieren?

Folgender Quelltext:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
//*******Unit1 des Formulars, in der Create aufgerufen wird******
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, UnitCasius;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Casius: TCasius;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 //try
  Casius := TCasius.Create;
 //finally
  Casius.Free;
 //end;
end;

end.


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
//************Unit, mit dem Object*****
unit UnitCasius;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TCasius = class(TObject)
    FunktionenListe:    TStrings;
    RechenzeichenListe: TStrings;
    KonstantenListe:    TStrings;    

    constructor Create;
    destructor  Free;
  end;

implementation

Constructor TCasius.Create;     //Casius Initialisieren
begin

  FunktionenListe := TStrings.Create; //Funktionen(Rang)liste Initialisieren

  RechenzeichenListe := TStrings.Create; //Rechenzeichen(Rang)liste Initialisieren

  KonstantenListe := TStrings.Create;    //KonstantenListeInitialisieren

end;

Destructor TCasius.Free;        //Casius Freigeben
begin
  FunktionenListe.Free;
  RechenzeichenListe.Free;
  KonstantenListe.Free;
end;

end.



Der fehler tritt beim erstellen von den Listen auf also bei "FunktionenListe := Tstrings.Create;"

Ich wäre echt erleichtert wenn jemand mir die Frage beantworten kann.

Unten negativ getesteter Quelltext.

Moderiert von user profile iconGausi: Beitragsformatierung überarbeitet.
Einloggen, um Attachments anzusehen!
counterto
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 123

Win XP
Delphi 2005 Prof., Visual Basic 2005, PHP, My Sql, Visual Basic 6
BeitragVerfasst: Mi 22.03.06 18:32 
welche Zeile unterlegt Delphi bei dir den mit rot? kannst du die mal posten?

_________________
Computer werden den Menschen immer ähnlicher - sie können bald alles, außer denken.
Ferrari
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 30

Win XP
Delphi 6 Personal
BeitragVerfasst: Mi 22.03.06 18:40 
Ich glaube du musst in die Prozedur TCasius.Create folgendes ergänzen:
ausblenden Delphi-Quelltext
1:
2:
3:
  FunktionenListe.Parent := Self;
  RechenzeichenListe.Parent := Self  
  KonstantenListe.Parent := Self;

Ich bin mir aber nicht so sicher.

_________________
Mehr als ein Hesse kann der Mensch kaum werden.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 22.03.06 18:47 
Ich würde jetzt eher darauf tippen, dass es mit dem tStrings.Create zu tun hat.
aus der Delphi-Hilfe:
Von TStrings abgeleitete Objekte ermöglichen die Speicherung und Bearbeitung von String-Listen. TStrings enthalten abstrakte bzw. rein virtuelle (C++ Terminologie) Methoden und sollten nicht direkt instantiiert werden.

Ersetze mal alle TStrings durch TStringList und füge im Create ein inherited am Anfang ein. Dann sollte es klappen ;-)

_________________
We are, we were and will not be.
Zyklame
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41
Erhaltene Danke: 1

Win 7 Professional
Delphi XE, Visual Studio 2010
BeitragVerfasst: Do 23.03.06 08:47 
das sollte funktionieren

ausblenden Delphi-Quelltext
1:
2:
3:
var FunktionenListe : TStrings
{...}
FunktionenListe := TstringList.Create
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Do 23.03.06 08:53 
user profile iconZyklame hat folgendes geschrieben:
das sollte funktionieren

ausblenden Delphi-Quelltext
1:
2:
3:
var FunktionenListe : TStrings
{...}
FunktionenListe := TstringList.Create

jooo, sollte das Problem beheben!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 23.03.06 18:45 
Titel: Danke
Ich habs noch nicht ausprobiert, aber ich glaub jetzt auch, dass ihr unten recht habt.
Bei nachforschungen in Standardsunits, hab ich mich auch schon gewundert, warum bei TMemo.Create
steht stringlist: tSrings und trotzdem stringlist := tstringlist.Create.

Danke für die schnell Hilfe