Hallo Leute!
Hoffentlich schaut sich jemand mein Problem an, obwohl es etwas schwer zu überblicken ist..
es handelt sich aber um einen syntaxfehler. wenn du dich mit klassen auskennst, dann denke ich findest du meinen fehler schnell. schau einfach erstmal auf die fehlermeldungen ganz unten.
Aufgabe ist es einen Zähler zu programmieren, welcher sich nach jedem klick auf einen button um 1 erhöt und der nach 59 wieder auf 0 zurückspringt. Die Zählerklasse (tCounter) ist in der Lage verschiedene einzelne operationen durchzuführen, wie zum beispiel tick (den zähler um 1 erhöhen). durch vererbung soll nun eine weitere "unterklasse" von tcounter erstellt werden, die regelt dass der zähler dann auch auf 0 zurückspringt, wenn er 60 erreicht hat. ich hab das ganze mal aufgebaut, es kommt jedoch eine fehlermeldung die ich mir nicht erklären kann.
zuerst die GUI Klasse
Hier die erste Klasse TCounter
und hier die unterklasse von tcounter, "tModCounter"
am rote markierten bereich wird beim compilieren die fehlermeldung angezeigt, welche lautet:
[Fehler] mTModCounter.pas(9): E2003 Undefinierter Bezeichner: 'TCounter'
außerdem spuckt er in der fehlerkonsole noch aus
[Fehler] mTModCounter.pas(16): E2137 Methode 'setCount' nicht in Basisklasse gefunden
[Fehler] mTModCounter.pas(17): E2137 Methode 'tick' nicht in Basisklasse gefunden
[Fehler] mTModCounter.pas(36): E2003 Undefinierter Bezeichner: 'SetCount'
[Fehler] mTModCounter.pas(37): E2003 Undefinierter Bezeichner: 'GetCount'
[Fehler] mTModCounter.pas(37): E2003 Undefinierter Bezeichner: 'Clear'
[Fehler] mTModCounter.pas(43): E2003 Undefinierter Bezeichner: 'tick'
[Fehler] mTModCounter.pas(44): E2003 Undefinierter Bezeichner: 'GetCount'
[Fehler] mTModCounter.pas(44): E2003 Undefinierter Bezeichner: 'Clear'
Hoffentlich schaut sich jemand mein Problem an, obwohl es etwas schwer zu überblicken ist..
es handelt sich aber um einen syntaxfehler. wenn du dich mit klassen auskennst, dann denke ich findest du meinen fehler schnell. schau einfach erstmal auf die fehlermeldungen ganz unten.
Aufgabe ist es einen Zähler zu programmieren, welcher sich nach jedem klick auf einen button um 1 erhöt und der nach 59 wieder auf 0 zurückspringt. Die Zählerklasse (tCounter) ist in der Lage verschiedene einzelne operationen durchzuführen, wie zum beispiel tick (den zähler um 1 erhöhen). durch vererbung soll nun eine weitere "unterklasse" von tcounter erstellt werden, die regelt dass der zähler dann auch auf 0 zurückspringt, wenn er 60 erreicht hat. ich hab das ganze mal aufgebaut, es kommt jedoch eine fehlermeldung die ich mir nicht erklären kann.
zuerst die GUI Klasse
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, mtCounter, StdCtrls;
type
TForm1 = class(TForm)
setzenBTN: TButton;
zaehlenBTN: TButton;
resetBTN: TButton;
Label1: TLabel;
Edit1: TEdit;
procedure resetBTNClick(Sender: TObject);
procedure zaehlenBTNClick(Sender: TObject);
procedure write;
procedure setzenBTNClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Zaehler : tCounter;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//------------------------------------------------------writer---//
procedure TForm1.write;
begin
label1.caption := inttostr(zaehler.getcount);
end;
//------------------------------------------------------FormCreate---//
procedure TForm1.FormCreate(Sender: TObject);
begin
zaehler := tcounter.create;
end;
//------------------------------------------------------setzen---//
procedure TForm1.setzenBTNClick(Sender: TObject);
var eingabe:integer;
begin
eingabe := strtoint(edit1.Text);
zaehler.setcount(eingabe);
write;
end;
//------------------------------------------------------zaehlen---//
procedure TForm1.zaehlenBTNClick(Sender: TObject);
begin
zaehler.tick;
write;
end;
//------------------------------------------------------reset---//
procedure TForm1.resetBTNClick(Sender: TObject);
begin
zaehler.clear;
write;
end;
end.
Hier die erste Klasse TCounter
Code:
UNIT mTCounter;
interface
//-------------------- ggf Uses-Liste anpassen ! --------------------
uses mTModCounter;
//-------------------- ggf Uses-Liste einfügen ! --------------------
//uses ....;
type
TCounter = class
private //Attribute
count : integer;
public //Methoden
constructor create; virtual;
procedure clear; virtual;
procedure setCount (n: integer); virtual;
procedure tick; virtual;
function getCount : integer; virtual;
end;
implementation
//+---------------------------------------------------------------------
//| TCounter: Methodendefinition
//+---------------------------------------------------------------------
//-------- create (public) ---------------------------------------------
constructor TCounter.create;
begin
count:= 0;
end;
//-------- clear (public) ----------------------------------------------
procedure TCounter.clear;
begin
count:= 0;
end;
//-------- setCount (public) -------------------------------------------
procedure TCounter.setCount (n: integer);
begin
count:= n;
end;
//-------- tick (public) -----------------------------------------------
procedure TCounter.tick;
begin
Inc(count);
end;
//-------- getCount (public) -------------------------------------------
function TCounter.getCount : integer;
begin
GetCount:= count;
end;
end.
und hier die unterklasse von tcounter, "tModCounter"
Code:
UNIT mTModCounter;
interface
//-------------------- ggf Uses-Liste anpassen ! --------------------
[COLOR="Blue"]//uses mTCounter; << wenn ich das hier nicht auskommentiere erscheinen die
//Fehlermeldungen nicht, nur folgender Fehler:
//[Fataler Fehler] mtCounter.pas(6): F2047 Zirkuläre Unit-Referenz auf 'mTCounter'[/COLOR]
type
[COLOR="Red"][B] TModCounter = class(TCounter)[/B][/COLOR]
private //Attribute
max : integer;
public //Methoden
procedure init (n: integer); virtual;
procedure setCount (n: integer); override;
procedure tick; override;
end;
implementation
//+---------------------------------------------------------------------
//| TModCounter: Methodendefinition
//+---------------------------------------------------------------------
//-------- init (public) -----------------------------------------------
procedure TModCounter.init (n: integer);
begin
max:= n;
end;
//-------- setCount (public) -------------------------------------------
procedure TModCounter.setCount (n: integer);
begin
inherited SetCount(n);
if GetCount >= max then Clear;
end;
//-------- tick (public) -----------------------------------------------
procedure TModCounter.tick;
begin
inherited tick;
if GetCount >= max then Clear;
end;
end.
am rote markierten bereich wird beim compilieren die fehlermeldung angezeigt, welche lautet:
[Fehler] mTModCounter.pas(9): E2003 Undefinierter Bezeichner: 'TCounter'
außerdem spuckt er in der fehlerkonsole noch aus
[Fehler] mTModCounter.pas(16): E2137 Methode 'setCount' nicht in Basisklasse gefunden
[Fehler] mTModCounter.pas(17): E2137 Methode 'tick' nicht in Basisklasse gefunden
[Fehler] mTModCounter.pas(36): E2003 Undefinierter Bezeichner: 'SetCount'
[Fehler] mTModCounter.pas(37): E2003 Undefinierter Bezeichner: 'GetCount'
[Fehler] mTModCounter.pas(37): E2003 Undefinierter Bezeichner: 'Clear'
[Fehler] mTModCounter.pas(43): E2003 Undefinierter Bezeichner: 'tick'
[Fehler] mTModCounter.pas(44): E2003 Undefinierter Bezeichner: 'GetCount'
[Fehler] mTModCounter.pas(44): E2003 Undefinierter Bezeichner: 'Clear'