Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rechner - "Undefinierter Bezeichner TFolge" (https://www.delphipraxis.net/45609-rechner-undefinierter-bezeichner-tfolge.html)

Feechan 9. Mai 2005 11:53


Rechner - "Undefinierter Bezeichner TFolge"
 
Hallo!
Ich sitz schon wieder mal länger an einem Programm, das so funktionieren soll:
Eine Tokenfolge namens "TFolge" wird angeliefert, und dann verarbeitet. Ich bekomme immer wieder den Fehler "Undefinierter Bezeichner TFolge"
Woran liegt das? Hier ist der Quelltext von Unit2 und Unit3, vielleicht könnt ihr mir helfen!

Unit2:

Delphi-Quellcode:
unit zScanclss;

interface

type tTokenfolge=array[1..100] of string;
type tOperatormenge = set of '*'..'/'; //Menge von Zeichen (=char) von .. bis
                                       // bezogen auf den ASCII-Code
type tZuweisungsScanner = class
    private
      Tokenfolge: tTokenfolge;
      index : integer; // Aktueller Tokenfolgenindex
      Operatormenge: tOperatormenge;
    public
      constructor create;
      function isOperator(c: char): boolean;
      procedure makeTokenfolge(quelle : string);
      procedure getTokenfolge(Var TFolge: tTokenfolge);
      function maxindex:integer;
end;

implementation

constructor tZuweisungsScanner.create;
begin
 Operatormenge := ['*','+','-','/'];
 index:=0; // Noch kein Token ermittelt.
end;

function tZuweisungsScanner.isOperator(c: char): boolean;
begin
  result := (c in Operatormenge); // Ist c in der Menge enthalten?
end;

procedure tZuweisungsScanner.makeTokenfolge(quelle : string);
var i : integer;
    tok : string;
begin
// 1.Variable bauen und einschreiben
i:=1;
tok:='';
while quelle[i]<>':' do
 begin
   tok:=tok+quelle[i];
   inc(i);
 end;

inc(index);
tokenfolge[index]:=tok;

// ':=' bauen und einschreiben
inc(index);
tokenfolge[index]:=quelle[i]+quelle[i+1];
inc(i); inc(i);

// Restschleife
while (i<length(quelle)) do
 begin
   // Falls Quellenende noch nicht erreicht, Variable bauen und einschreiben
   tok:='';
   while (i<length(quelle))and (not isOperator(quelle[i]))do
    begin
      tok:=tok+quelle[i];
      inc(i)
    end;

   inc(index);
   tokenfolge[index]:=tok;

   //Falls Quellenende noch nicht erreicht, Operator einschreiben
   if i<length(quelle)then
    begin
      inc(index);
      tokenfolge[index]:=quelle[i];
      inc(i);
    end;
 end; (* of Restschleife *)

// ';' einschreiben
inc(index);
tokenfolge[index]:=quelle[i];

end;

procedure tZuweisungsScanner.getTokenfolge(Var TFolge: tTokenfolge);
begin
 TFolge:= tokenfolge;
end;

function tZuweisungsScanner.maxindex: integer;
begin
result:=index;
end;

end.
Unit3:

Delphi-Quellcode:
unit Unit3;

interface

uses zscanclss;
(*Voraussetzung:
   1. Nur drei Variablen möglich
   2. Keine Zahlen in der Wertzuweisung
   3. Nur die Operationen '+' und '-' möglich,
      eventuell mehrfach
   4. Zahlenwerte für die Variablen sind 3 Editfeldern zu
      entnehmen. Dies macht aber der Anwender!
*)
type trechner=class

private
   Wert1, Wert2, Wert3 :integer; //Gibt uns der Anwender!

public
   procedure setWerte(a,b,c :integer); //Reiherfolge wie bei den Editfeldern!
   procedure berechne(a,b,c:integer);
end;

implementation

{ trechner }


procedure trechner.berechne(a, b, c: integer);
var i,hilf,zwischen:integer;
var name1,name2,name3:string;
begin
i:=4;
zwischen:=Wert1;
name1:=TFolge[3];
name2:='0';
name3:='0';
while TFolge[i]<>';' do begin
if Tfolge[i]='+' then begin
if tfolge[i+1]=name1 then zwischen:=zwischen+wert1
else if tfolge[i+1]<> name1 then begin
name2:=tfolge[i+1];
zwischen:=zwischen+wert2;
end
else if (tfolge[i+1]<>name1) and (tfolge[i+1]<>name2)
then begin
name3:=tfolge[i+1];
zwischen:=zwischen+wert3;
end;
inc(i);
inc(i);
end;
end;
end;

procedure trechner.setWerte(a, b, c: integer);
begin
wert1:=a;
wert2:=b;
wert3:=c;
end;

end.
Der Fehler tritt beim Starten auf und liegt wohl an Unit3, hab aber keine Ahnung, woran!
Bitte helft mir!
:wiejetzt:

s14 9. Mai 2005 11:58

Re: Rechner - "Undefinierter Bezeichner TFolge"
 
Hallo,
TFolge ist in Unit3 ja auch nicht deklariert :???:

Feechan 9. Mai 2005 12:07

Re: Rechner - "Undefinierter Bezeichner TFolge"
 
super, und wie mach ich das? Als private-Deklaration im Interface-Teil?

Khabarakh 9. Mai 2005 12:19

Re: Rechner - "Undefinierter Bezeichner TFolge"
 
Warum gibst du einer Instanz einen Namen mit "T" am Anfang :? ?
Wenn die Variable nur in Berechne vorkommt:
Delphi-Quellcode:
procedure TRechner.Berechne(a, b, c: Integer);
var
  i, hilf, zwischen: Integer;
  name1, name2, name3: string;
  Folge: TTokenFolge;

Feechan 9. Mai 2005 12:22

Re: Rechner - "Undefinierter Bezeichner TFolge"
 
Vorgabe meines Info-Lehrers, den muss man nicht verstehen ^^
Danke nochmal!
Jetzt hab ich einen Fehler beim Übergeben der Werte Wert1, Wert2, Wert3!
Folgendes Fenster erscheint:

"Zugriffsverletzung bei Adresse (...)"
Der Fehler soll an der Stelle Wert1:=a; sein...
:wiejetzt: :wall:

Feechan 9. Mai 2005 12:35

Re: Rechner - "Undefinierter Bezeichner TFolge"
 
Ich krieg die Krise!
:roteyes:

Ich verstehe nicht, warum es an der Stelle ein Problem gibt, ich habe die Werte von String nach Integer umgewandelt und will sie nur anderen Integer-Variablen zuordnen -.-
:gruebel:

Luckie 9. Mai 2005 12:59

Re: Rechner - "Undefinierter Bezeichner TFolge"
 
Erzeugst du auch irgendwo eine Instanz der Klasse?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 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