![]() |
Anfängerproblem
Ich bin absoluter Programmieranfänger und habe ein Problem über das ihr warscheinlich kaputtlacht... Aber ich komme in diesem Fall nicht weiter. Ich habe ein Projekt, dass bisher aus 3 Units besteht. Der GUI, USpieler und UBank. In der GUI werden Spieler und Bank von Typ TSpieler und TBank erzeugt. Allerdings weiß ich nicht wie ich dann in USpieler auf UBank zugreifen kann.
Ich will die Zinsen eines Spielers berechnen der sein Geld auf ein Sparbuch (Bank) legt. Dabei zeigt Delphi mir bei der Zeile Bank.Zinsenberechnen(Geld); (Fehlermeldung: Undefinierter Bezeichner 'Bank') eine Fehlermeldung an und ich weiß halt nicht wie ich die beheben soll. Ich hab die Units unten reinkopiert. Normalerweise steht noch viel mehr in den Units. Ich hab aber alles was nichts mit den Problem zu tun hat hier rausgetan, damit der Beitrag nicht zu lang wird... Danke im Voraus für eure Hilfe!!! (Achja Programmversion ist TurboDelphi6)
Delphi-Quellcode:
unit UGUI;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, USpieler, UBank ; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Spieler:TSpieler; Bank:TBank; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin randomize; Bank:=TBank.create; Spieler:=TSpieler.create(1000); end; end. _____________________________________________________________ unit USpieler; interface uses UBank; type TSpieler=class private Geld:real; public function getGeld:real; constructor create(Startgeld:real); procedure Runde; end; implementation function TSpieler.getGeld; begin result:=Geld; end; constructor TSpieler.create(Startgeld:real); begin Geld:=1000; end; procedure TSpieler.Runde; begin Bank.Zinsenberechnen(Geld); end; end. ______________________________________________________________________ unit UBank; interface type TBank=class private Zinssatz:real; Zinsen:real; public constructor create; procedure Zinsenberechnen(Geld:real); function getZinsen:real; end; implementation procedure TBank.Zinsenberechnen(Geld:real); begin Zinsen:=Geld*Zinssatz; end; constructor TBank.create; begin Zinssatz:=2; end; function TBank.getZinsen:real; begin result:=Zinsen; end; end. |
AW: Anfängerproblem
Verrätst Du uns denn auch die Fehlermeldung? Übrigens: benutze doch bitte die Delphi-Tags, dann ist der Code viel besser zu lesen. Und ein anderer Thread-Titel, der grob umreißt, worum es geht, wäre auch nicht schlecht.
|
AW: Anfängerproblem
Die Fehlermeldung heißt:
Undefinierter Bezeichner 'Bank' ich füge es oben auch mal ein |
AW: Anfängerproblem
Die Unit Spieler kennt zwar die Unit Bank,
aber eine Instanz von Spieler, kenn nicht die Instanz von Bank. Du könntest: In Spieler eine Variable "Bank" anlegen und dieser die in GUI createte Bank zuweisen oder Zinsenberechnen könnte eine statische Funktion von Bank werden, dann reicht es die Unit einzubinden oder... es kommt glaub ich drauf an, was genau du erreichen willst |
AW: Anfängerproblem
Da "Bank" un UGUI erzeugt wird, ist sie natürlich in USpieler unbekannt.
Gruß K-H |
AW: Anfängerproblem
Bitte gib deinem Beitrag einen aussagekräftigen Titel. :-) Der jetzige Titel lässt in keinster Weise erahnen um was es in dem Thema geht. Zudem findet später jemand mit dem gleichen Problem die Lösung nur sehr schwer wenn keine ordentlichen Thementitel verwendet werden.
|
AW: Anfängerproblem
Ich habe gemerkt, dass das Thema "Normalisierung von Datenbanktabellen" den Leuten hilft solche Abhängigkeiten und was man wo einbinden muss besser zu verstehen.
Wie die anderen vor mir schon gesagt hat kennt dein Spieler die Bank nicht. Wenn der Zinssatz konstant ist, kannst du daraus eine statische Methode machen. Wenn nicht macht es Sinn dem Spieler eine Kopie der Instanz der Bank mitzugeben. Also über sowas:
Delphi-Quellcode:
TSpieler = class
. . private FBank : TBank; . . end; procedure TSpieler.setBank(ABank : TBank); begin FBank := ABank end; procedure TSpieler.Runde; begin FBank.TuWas; // Nicht vergessen zu prüfen ob FBank evtl noch nil ist oder so end; |
AW: Anfängerproblem
Du willst von USpieler auf die globale Variable Bank in UGUI zugreifen, richtig?
USpieler:
Delphi-Quellcode:
Ich erstelle mir für was immer ein Datenmodul das noch vor dem Hauptformular erzeugt wird. So kannst du Daten und Darstellung besser trennen.
...
// Am besten die Unit im implementation Abschnitt einbinden uses UGUI; ... UGUI.Bank.Zinsenberechnen(Geld); Außerdem fehlt in UGUI noch ein FormDestroy-Event in dem du Bank freigibst (FreeAndNil(Bank); |
AW: Anfängerproblem
Nein der Zinssatz soll nicht konstant sein...
Danke an alle! Es funktioniert jetzt :) Den Topicnamen würde ich gerne ändern, aber ich finde grade nicht wo man das machen kann :( |
AW: Anfängerproblem
Beitrag editieren und auf "Erweitert" klicken.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr. |
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-2025 by Thomas Breitkreuz