Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi typen probleme (https://www.delphipraxis.net/21379-typen-probleme.html)

StefanDP 1. Mai 2004 22:31


typen probleme
 
hi!
ich habe folgendes problem:

ich habe meine typen in eine .pas ausgelagert: (vereinfacht)
Delphi-Quellcode:
unit Typen;

interface
type

  TSpielfeld = class
  public
    Datei: String;                       // Level-Datei
  end;

  TSpiel = class
  public
    Spielfeld: TSpielfeld;               // ein Spielfeld
  end;

implementation

end.
in meinem hauptprogramm möchte ich jetzt eine variable Spiel vom Typ TSpiel haben!
das funktioniert auch soweit, nur kann ich dann z.b. Spiel.Spielfeld.Datei := nichts zuweisen --> Fehler!

das hauptprogramm sieh vereinfacht so aus:
Delphi-Quellcode:
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;
beim kompilieren kommt jetzt immer ein fehler: "zugriffsverletzunge ..."

kann mir jemand nen tip geben? wäre echt sehr dankbar

mfg
stefan

alcaeus 1. Mai 2004 22:45

Re: typen probleme
 
Delphi-Quellcode:
Spiel := TSpiel.Create;
Spiel.Datei := Dateiname;
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
Delphi-Quellcode:
Spiel := TSpiel.Create(Self);

StefanDP 1. Mai 2004 23:15

Re: typen probleme
 
geht nicht! :cry:

Skiron 1. Mai 2004 23:18

Re: typen probleme
 
wo genau kommt deine Zugriffsverletzung?
in welcher zeile?

im fall musst du auch noch das Spielfeld erstellen

Spiel.SpielFeld := TSpielFeld.Create;

SleepyMaster 1. Mai 2004 23:23

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.

StefanDP 1. Mai 2004 23:27

Re: typen probleme
 
Zitat:

Zitat von Skiron
wo genau kommt deine Zugriffsverletzung?
in welcher zeile?

im fall musst du auch noch das Spielfeld erstellen

Spiel.SpielFeld := TSpielFeld.Create;

*ganz tief vor dir verbeug und hochachtung aussprech* :thuimb:

danke! das ist der richtige lösungsansatz!

mfg
stefan

:dp:

Robert_G 2. Mai 2004 00:04

Re: typen probleme
 
Das sollte eigentlich in einem Contructor erfolgen. ;)
Delphi-Quellcode:
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;
So könnte man es dann verwenden
Delphi-Quellcode:
var
  Spiel: TSPiel;
begin
  Spiel := TSpiel.create('BlaBla.Txt');
  try
    ShowMessage(Spiel.Spielfeld.Datei);
  finally
    FreeAndNil(Spiel);
  end;
end;
oder...
Delphi-Quellcode:
var
  Spiel: TSPiel;
begin
  Spiel := TSpiel.create;
  try
    Spiel.SpielFeld.Datei := 'BlaBla.Txt';
    ShowMessage(Spiel.Spielfeld.Datei);
  finally
    FreeAndNil(Spiel);
  end;
end;

StefanDP 2. Mai 2004 00:08

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:

Robert_G 2. Mai 2004 00:10

Re: typen probleme
 
Lass mal...
Ich hatte den Destructor vergessen. ;)
Man muss das Spielfeld auch freigeben, wenn das Spiel freigegeben wird.

faux 2. Mai 2004 06:54

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 08:40 Uhr.
Seite 1 von 2  1 2      

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