Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Objekt: Keller" geht nicht... (https://www.delphipraxis.net/103278-objekt-keller-geht-nicht.html)

Progman 13. Nov 2007 18:00

Re: "Objekt: Keller" geht nicht...
 
nach interface eventuell noch nen uses-Block unterbringen?
Delphi-Quellcode:
uses Classes, Windows;
eventuell noch mehr, ich weiß jetzt nicht ausm Kopf, welche Units mind. notwendig sind.

marabu 13. Nov 2007 18:00

Re: "Objekt: Keller" geht nicht...
 
Besser so:

Delphi-Quellcode:
  TKeller = class
    FKeller: array of string;
    constructor create;
    procedure push(m:string);
    procedure pop;
    function top:string;
  end;
Grüße vom marabu

thkerkmann 13. Nov 2007 18:02

Re: "Objekt: Keller" geht nicht...
 
Hi,

sollte die Membervariable Keller nicht lieber vom Typ Array of string sein ?
Du willst doch Strings speichern.

Nur mal so...

[Edit] hrr, marabu war schneller [/Edit]
Gruss

ArchaicSeraphim 13. Nov 2007 18:03

Re: "Objekt: Keller" geht nicht...
 
Delphi-Quellcode:
unit Keller;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TKeller = class
    FKeller: array of string;
    constructor create;
    procedure push(m:string);
    procedure pop;
    function top:string;
  end;

var
  n: integer;
  oKeller: TKeller;

implementation

constructor TKeller.create;
begin
  inherited create;
  n:=1;
end;

procedure TKeller.push(m:string);
begin
  inc(n);
  setlength(FKeller,n);
  FKeller[n-1] := m;
end;

procedure TKeller.pop;
begin
  dec(n);
  setlength(FKeller,n);
end;

function TKeller.top:string;
begin
  result := FKeller[n-1];
end;

end.
So, jetzt geht's. Gracias!!! :party: :party: :party:

cruiser 13. Nov 2007 18:05

Re: "Objekt: Keller" geht nicht...
 
n als globale Variable.. wird sicher lustig, wenn man zwei Instanzen der Klasse hat.. bau das mal lieber mit in die Klasse rein.

thkerkmann 13. Nov 2007 18:06

Re: "Objekt: Keller" geht nicht...
 
Zitat:

n als globale Variable.. wird sicher lustig, wenn man zwei Instanzen der Klasse hat.. bau das mal lieber mit in die Klasse rein.
Genau, und im Create bei 0 starten lassen

ArchaicSeraphim 13. Nov 2007 18:45

Re: "Objekt: Keller" geht nicht...
 
Sorry, ist immer noch nicht fertig. Jetzt geht Folgendes nicht:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Keller, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Keller: TKeller;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Keller:=TKeller.create
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Keller.push('m');
  Label1.Caption:=Keller.top;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Keller.push('X');
  Label1.Caption:=Keller.top;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Keller.pop;
  Label1.Caption:=Keller.top;
end;

end.
Hat das was mit dem n zu tun? Und wie kann ich's so deichseln, dasses geht?
Danke schonmal jedenfalls.

€dit: bei 0 starten lassen kann ich nicht wegen

Delphi-Quellcode:
constructor TKeller.create;
begin
  inherited create;
  n:=1;
  FKeller[n-1] := 's';   // <<<< undefiniert bei n=0, oder?
end;

mkinzler 13. Nov 2007 18:47

Re: "Objekt: Keller" geht nicht...
 
Was für ein Fehler meldet der Compiler?

ArchaicSeraphim 13. Nov 2007 18:48

Re: "Objekt: Keller" geht nicht...
 
Fehler:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00403E8C in Modul 'Project1.exe'. Schreiben von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

mkinzler 13. Nov 2007 18:51

Re: "Objekt: Keller" geht nicht...
 
Du hast den Array als dynamischen array deklariert. Du musst ihn also dimensionieren (setLength())


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.
Seite 2 von 3     12 3      

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