Autor Beitrag
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Di 11.11.03 19:31 
Hi,

ich habe mir eine eigene kleine Klasse erstellt. Etw so...:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
  TSpiel = class

  private
  heimname : string;
  gastname : string;
  heimtore : integer;
  gasttore : integer;
  constructor create;

    { Private declarations }
  public
    function wersieger(): string;
    procedure heimtrifft;
    procedure gasttrifft;
    { Public declarations }
end;


Die Methode wersieger(); wird ohne Parameter aufgerufen und gibt zurück, wer in Führung ist/Sieger ist (nach aktuellem Spielstand).

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function TSpiel.wersieger: string;
begin
if gasttore > heimtore then result := 'gast';
if heimtore > gasttore then result := 'heim';
if heimtore = gasttore then result := 'Unentschieden';
end;

procedure TSpiel.gasttrifft;
begin
inc(gasttore);
end;

procedure TSpiel.heimtrifft;
begin
inc(heimtore);
end;


Soweit so gut.....

Nun kommt mein Problem....:

Hier der Quellcode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
unit haupt;

interface

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

type
  Thauptform = class(TForm)
   button1: TButton;
   procedure button1click(Sender : TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  hauptform: Thauptform;
  spiele : array[1..7of TSpiel;

implementation

{$R *.dfm}

procedure Thauptform.button1click(Sender : TObject);
begin
spiele[1].heimtrifft;   // Hier bekomm ich ne ACCESS VIOLATION
end;


Was mach ich falsch.. Warum bekomme ich schon wieder eine access Violation.....
Warum sind die gasttrifft, bzw. heimtrifft Metgoden nicht ansprechbar ?

Bitte bitte helfen :)

Catweasel

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Di 11.11.03 20:07 
Titel: hmm,
wenn du eine Klasse erstellst musst du diese erstmal mit Create initialisieren

also
ausblenden Delphi-Quelltext
1:
Spiel[1] := TSpiel.create;					

_________________
mfg. Joel
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Di 11.11.03 20:36 
Titel: stimmt da fehler auch der creator.....
Hi,

Du hast geschrieben:

Zitat:
ausblenden Quelltext
1:
Spiel[1] := TSpiel.create;					


Ahso, muss man jas für jedes arrayelement einzeln machen ?!.
Ich dachte durch das deklarieren des arrays würden alle elemente mitinitialisiert werden......
:oops:

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 11.11.03 20:47 
ja, du mußt Objekte immer erzeugen und freigeben natürlich auch.

Gugg dir in dem Zusammenhang auch mal TObjectlist an. die ist dafür gemacht, eigene erstellten Objekte zu verwalten und bietet einige Listentypische Operationen (verschieben, löschen ...) du kannst dort zumindestens einstellen, daß die Liste ihre Elemnte auch selbst auf wunsch wieder freigibt.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Di 11.11.03 21:55 
Titel: Re: stimmt da fehler auch der creator.....
catweasel hat folgendes geschrieben:
Zitat:
ausblenden Quelltext
1:
Spiel[1] := TSpiel.create;					


Ahso, muss man jas für jedes arrayelement einzeln machen ?!.

Nicht direkt:
ausblenden Delphi-Quelltext
1:
2:
for i := 1 to 7 do
  spiele[i] := TSpiel.Create;

Reicht auch ;-)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Mi 12.11.03 00:18 
Titel: smile
hi,


Zitat:
Nicht direkt:
Sourcecode:
for i := 1 to 7 do
spiele[i] := TSpiel.Create;

Reicht auch


Allerdings :wink:


Zitat:
Gugg dir in dem Zusammenhang auch mal TObjectlist an. die ist dafür gemacht, eigene erstellten Objekte zu verwalten und bietet einige Listentypische Operationen (verschieben, löschen ...) du kannst dort zumindestens einstellen, daß die Liste ihre Elemnte auch selbst auf wunsch wieder freigibt.


Hmm das werd ich mir gleich mal näher anguggen....

Meine (vielleicht etwas naive :oops: ) Idee wäre gewesen ein "leeres Dummy" Object vom Typ TComponent zu erzeigen, diesem alle Objekte des typs TSpiel als unterordnen (Dummy als Owner bestimmen).. und den Dummy Owner wenn erwünscht fallenlassen wie eine heisse Kartoffel..

Ist das sinnvoll/möglich ? Was ist gutes OOP ?? :wink:

p.s: Wenn ich den create contructor einer Klasse mit override überschreiben will, sagt er immer "Can't override a static method"...
Was an sich klar ist, es sei denn der constructor der Basisklasse wäre als virtual vereinbart worden, oder???
(Ich beschäftige mich noch nich soo lange mit OOP) :oops:

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 12.11.03 10:28 
Titel: Re: smile
catweasel hat folgendes geschrieben:

Meine (vielleicht etwas naive :oops: ) Idee wäre gewesen ein "leeres Dummy" Object vom Typ TComponent zu erzeigen, diesem alle Objekte des typs TSpiel als unterordnen (Dummy als Owner bestimmen).. und den Dummy Owner wenn erwünscht fallenlassen wie eine heisse Kartoffel..

Ist das sinnvoll/möglich ? Was ist gutes OOP ?? :wink:

möglich schon, aber die Objectlist ist ja dafür da.
Zitat:

p.s: Wenn ich den create contructor einer Klasse mit override überschreiben will, sagt er immer "Can't override a static method"...
Was an sich klar ist, es sei denn der constructor der Basisklasse wäre als virtual vereinbart worden, oder???

die Fehlermeldung im Fenster anklicken und F1 drücken.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mi 12.11.03 10:29 
Hi,

Catweasel hat folgendes geschrieben:
Was an sich klar ist, es sei denn der constructor der Basisklasse wäre als virtual vereinbart worden, oder???


Richtig. Nur Methoden die als virtual oder dynamic deklariert sind können in Nachfahr-Klassen überschrieben werden. In deinem Fall hast du keine Vorfahr-Klasse angegeben. Also wird automatisch von TObejct abgeleitet und dort ist Create statisch, d.h. weder virtual noch dynamic.

MFG

- Ernesto -
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mi 12.11.03 13:37 
Titel: Re: stimmt da fehler auch der creator.....
catweasel hat folgendes geschrieben:
Ahso, muss man jas für jedes arrayelement einzeln machen ?!.
Ich dachte durch das deklarieren des arrays würden alle elemente mitinitialisiert werden......
:oops:
Catweasel


das hat in dem fall mit initialisieren nix zu tun. die legst im grunde nur pointer an, die sind anfangs alle nil. dann musst du mit der Create-Methode erst ein objekt im speicher anlegen. diese Create-Methode liefert dann die adresse zurück, wo das objekt im speicher liegt. diese adresse weist du ja deinem pointer zu.

shadow.

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.

_________________
"soylent grün ist menschenfleisch!"
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Fr 14.11.03 20:50 
Titel: Gibts bei mir nicht :-(
Hi,

Ich hab hier kürzlich den Tipp bekommen :

Zitat:
Gugg dir in dem Zusammenhang auch mal TObjectlist an. die ist dafür gemacht, eigene erstellten Objekte zu verwalten und bietet einige Listentypische Operationen (verschieben, löschen ...) du kannst dort zumindestens einstellen, daß die Liste ihre Elemnte auch selbst auf wunsch wieder freigibt.


Nur gibts bei meinem Delphi den Typ TObjectlist nicht... "Undeclared Identifier" :evil:

Der Typ müsste eigentlich laut Delphi CLX-Hilfe in der Unit "Classes" eingebunden sein. Doch im Quelltext wird ein Typ TObjectlist nicht vereinbart.... Wo ist TObjectlist ?

Ich benutze Delphi 6 Enterprise.

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Fr 14.11.03 21:52 
uses Contnrs;

CLX is nich für delphi, da musste die VCL-hilfe nehmen.

shadow.

_________________
"soylent grün ist menschenfleisch!"