![]() |
typen probleme
hi!
ich habe folgendes problem: ich habe meine typen in eine .pas ausgelagert: (vereinfacht)
Delphi-Quellcode:
in meinem hauptprogramm möchte ich jetzt eine variable Spiel vom Typ TSpiel haben!
unit Typen;
interface type TSpielfeld = class public Datei: String; // Level-Datei end; TSpiel = class public Spielfeld: TSpielfeld; // ein Spielfeld end; implementation end. das funktioniert auch soweit, nur kann ich dann z.b. Spiel.Spielfeld.Datei := nichts zuweisen --> Fehler! das hauptprogramm sieh vereinfacht so aus:
Delphi-Quellcode:
beim kompilieren kommt jetzt immer ein fehler: "zugriffsverletzunge ..."
unit Main;
interface uses ...Typen; implementation var Spiel: TSpiel; ... procedure LevelLaden(datei: String); begin Spiel.Spielfeld.Datei := datei; // oder auch Spiel.Spielfeld.Datei := 'bla.txt'; end; kann mir jemand nen tip geben? wäre echt sehr dankbar mfg stefan |
Re: typen probleme
Delphi-Quellcode:
Vergiss nicht dein Objekt zu erstellen, probier mal die Sache mit Create. Es kann sein dass du noch einen Owner angeben musst, in dem Fall lautet die Zeile
Spiel := TSpiel.Create;
Spiel.Datei := Dateiname;
Delphi-Quellcode:
Spiel := TSpiel.Create(Self);
|
Re: typen probleme
geht nicht! :cry:
|
Re: typen probleme
wo genau kommt deine Zugriffsverletzung?
in welcher zeile? im fall musst du auch noch das Spielfeld erstellen Spiel.SpielFeld := TSpielFeld.Create; |
Re: typen probleme
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TSpielfeld = class(Tobject) public Datei : String; // Level-Datei end; TSpiel = class(Tobject) public Spielfeld: TSpielfeld; // ein Spielfeld end; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x: TSpiel; begin x:=TSpiel.Create; x.Spielfeld:=TSpielfeld.Create; x.Spielfeld.Datei:='KA'; ShowMessage(x.Spielfeld.Datei); end; end. |
Re: typen probleme
Zitat:
danke! das ist der richtige lösungsansatz! mfg stefan :dp: |
Re: typen probleme
Das sollte eigentlich in einem Contructor erfolgen. ;)
Delphi-Quellcode:
So könnte man es dann verwenden
type
TSpielfeld = class(TObject) public Datei: string; // Level-Datei constructor create; overload; constructor create(const FileName: string); overload; end; TSpiel = class(TObject) public Spielfeld: TSpielfeld; // ein Spielfeld constructor create; overload; constructor create(const FileName: string); overload; end; implementation { TSpiel } constructor TSpiel.create(const FileName: string); begin inherited create; Spielfeld := TSpielfeld.Create(FileName); end; constructor TSpiel.create; begin inherited create; Spielfeld := TSpielfeld.Create; end; { TSpielfeld } constructor TSpielfeld.create; begin inherited create; end; constructor TSpielfeld.create(const FileName: string); begin inherited create; Datei := FileName; end;
Delphi-Quellcode:
oder...
var
Spiel: TSPiel; begin Spiel := TSpiel.create('BlaBla.Txt'); try ShowMessage(Spiel.Spielfeld.Datei); finally FreeAndNil(Spiel); end; end;
Delphi-Quellcode:
var
Spiel: TSPiel; begin Spiel := TSpiel.create; try Spiel.SpielFeld.Datei := 'BlaBla.Txt'; ShowMessage(Spiel.Spielfeld.Datei); finally FreeAndNil(Spiel); end; end; |
Re: typen probleme
danke für deine bemühungen! aber ich hab jetzt teilweise sachen in einen record geändert!
nurnoch TSpiel selber ist jetzt eine Class, d.h. ich brauch auch nur sie createn (und wieder freigeben...) mfg stefan :dp: |
Re: typen probleme
Lass mal...
Ich hatte den Destructor vergessen. ;) Man muss das Spielfeld auch freigeben, wenn das Spiel freigegeben wird. |
Re: typen probleme
Eine Verständnisfrage:
Wieso hast du zwei Constructoren gemacht? Einen mit und einen ohne Filename. Muss man da zwei machen?? Oder hast du das nur einfach so gemacht?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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