Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi type Auf Eigenschaft kann hier nicht zugegriffen werden (https://www.delphipraxis.net/103507-type-auf-eigenschaft-kann-hier-nicht-zugegriffen-werden.html)

gandime 16. Nov 2007 17:22


type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Hi,
ich habe folgenden Fehler:
Zitat:

[DCC Fehler] Unit1.pas(51): E2233 Auf Eigenschaft 'i_pos_x' kann hier nicht zugegriffen werden
bei folgendem code:
Delphi-Quellcode:
type
  ball = class
  private
    i_x,i_y:integer;
  public
    procedure mal_dich;
  published
    property i_pos_x: integer read i_x write i_x;
    property i_pos_y: integer read i_y write i_y;
end;

procedure mal_dich;
var
  i:integer;
begin
  i:=ball.i_pos_x;//hier is der fehler
end;
warum is das so?^^


mfg
gandime

DeddyH 16. Nov 2007 17:25

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Weil Deine Variable genauso wie die Klasse heißt?

Thorben_Ko 16. Nov 2007 17:25

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Lass das Ball mal weg und schau was dann passiert :D

Delphi-Quellcode:
type
  ball = class
  private
    i_x,i_y:integer;
  public
    procedure mal_dich;
  published
    property i_pos_x: integer read i_x write i_x;
    property i_pos_y: integer read i_y write i_y;
end;

procedure mal_dich;
var
  i:integer;
begin
  i:=i_pos_x;//hier is der fehler
end;

Dax 16. Nov 2007 17:26

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Nimm das "ball." dort raus.

Erklärung:

Eine Klasse kann statische Felder und Instanzfelder enthalten. Statische Felder werden von allen Instanzen geteilt und durch Klassenname.Feldname angesprochen. Instanzfelder werden nur von einer Instanz der Klasse benutzt (wie der Name schon sagt) und werden durch Self.Feldname angesprochen. Das Self. fügt Delphi aber implizit ein.

Das selbe gilt auch für Methoden und Properties.

DeddyH 16. Nov 2007 17:27

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Delphi-Quellcode:
type
  Tball = class //habe mal den Klassennamen geändert
  private
    i_x,i_y:integer;
  public
    procedure mal_dich;
  published
    property i_pos_x: integer read i_x write i_x;
    property i_pos_y: integer read i_y write i_y;
end;

procedure Tball.mal_dich; //hier fehlte die Definition als Klassenmethode
var
  i:integer;
begin
  i:=self.i_pos_x;
end;

gandime 16. Nov 2007 17:30

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
danke für die schnelle antwort jetzt gehts :-)

edit:
wenn aber eine andere Procedure, die nichts mit Ball zutun hat hab ich wieder das selbe Prob

nen beispiel:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Tball.i_pos_x:=10;
end;

DeddyH 16. Nov 2007 17:35

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Ball: TBall;
begin
  Ball := TBall.Create;
  Ball.i_pos_x:=10;
end;
Nicht Klassen und Instanzen durcheinanderwerfen!

Sharky 16. Nov 2007 17:36

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
Hai gandime,

Du musst erst eine Instanz deiner Klasse erzeugen.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 meinBall : TBall;
begin
  meinBall := TBall.Create;
  Try
    meinBall.i_pos_x:=10;
  Finally
    meinBall.Free; // Das natürlich nicht im FormCreate ;-)
  end;
end;
Ausserdem solltest Du deiner Klasse einen Delphi-Referenz durchsuchenconstructor spendieren. Selbst wenn der fast nichts macht.

gandime 16. Nov 2007 17:37

Re: type Auf Eigenschaft kann hier nicht zugegriffen werden
 
ups doofe frage :oops:

jetzt gehts danke :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.

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