AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Class -->Error

Ein Thema von Teekeks · begonnen am 9. Jan 2009 · letzter Beitrag vom 10. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2   
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#1

Class -->Error

  Alt 9. Jan 2009, 17:03
Hallo!
Ich probiere mich gerade an Klassen aus und bin auf ein von mir unlößbares Problem gestoßen.
Hier erstmal mein bisheriger Code:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 =class;

  TTier = class
  private
    pArt:string;
    pAlter:integer;
    pGeschlecht:string;
    pKrankheit:string;
  public
    constructor Create(Krankheit:string; Geschlecht:string; Art:string);
  published
    property getTierart:string read pArt;
    property getAlter:integer read pAlter;
    property getGechlecht: string read pGeschlecht;
    property getKrankheit:string read pKrankheit;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    Tier:TTier;
  end;


var
  Form1: TForm1;

implementation

{ TForm1 }
constructor TTier.Create(Krankheit:string; Geschlecht:string; Art:string);
begin
  pAlter:=0;
  pGeschlecht:=Geschlecht;
  pArt:=Art;
  pKrankheit:=Krankheit;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Tier.Create('Gesund','Weiblich','Katze');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption:=Tier.pKrankheit;
  Label2.Caption:=Tier.pArt;
  Label3.Caption:=Tier.pGeschlecht;
  Label4.Caption:=inttostr(Tier.pAlter);
end;

initialization
  {$I unit1.lrs}

end.
jestz bekomme ich wenn ich auf Button1 Klicke eine meldung:
Zitat von Lazarus:
Project project1 raised exception class 'External: SIGSEGV'
Was mache ich falsch? weil eigentlich (wenn ich die Fehlermeldung richtig Deute) will der mich ja darauf hinweisen das ich die Klasse nicht "created" habe,oder?

gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Class -->Error

  Alt 9. Jan 2009, 17:05
Zitat von Teekeks:
weil eigentlich (wenn ich die Fehlermeldung richtig Deute) will der mich ja darauf hinweisen das ich die Klasse nicht "created" habe,oder?
Genau, es muss nämlich ":= TTier.Create" heissen, nicht ".Create".
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Class -->Error

  Alt 9. Jan 2009, 17:06
Hi,

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Tier := tTier.Create('Gesund','Weiblich','Katze');
end;
Gruß
Norman
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Class -->Error

  Alt 9. Jan 2009, 17:10
ah. Danke!
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Class -->Error

  Alt 9. Jan 2009, 17:27
Genauso heißt es aber auch nicht
Label1.Caption:=Tier.pKrankheit; sondern, da pKrankheit ein private-Attribut deiner Klasse ist, die du über deine property getKrankheit:string read pKrankheit; publishst (diese eingedeutschten Wörter :-\)
Label1.Caption := Tier.getKrankheit;
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Class -->Error

  Alt 9. Jan 2009, 17:40
Im Normalfall macht man das ja auch so:
Delphi-Quellcode:
  TTier = class
  private
    pArt:string;
    pAlter:integer;
    pGeschlecht:string;
    pKrankheit:string;
    function getTierart: string;
    function getAlter: integer;
    function getGechlecht: string;
    function getKrankheit: string;
  public
    constructor Create(Krankheit:string; Geschlecht:string; Art:string);
  published
    property Tierart:string read getTierart;
    property Alter:integer read getAlter;
    property Gechlecht: string read getGeschlecht;
    property Krankheit:string read getKrankheit;
  end;

...
function TTier.getTierart: string;
begin
  Result := pArt;
end;

//usw. für die anderen Properties
Wobei man statt pArt dann FArt etc. schreiben würde.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Class -->Error

  Alt 9. Jan 2009, 17:53
Zitat von quendolineDD:
Genauso heißt es aber auch nicht
Label1.Caption:=Tier.pKrankheit; sondern, da pKrankheit ein private-Attribut deiner Klasse ist, die du über deine property getKrankheit:string read pKrankheit; publishst (diese eingedeutschten Wörter :-\)
Label1.Caption := Tier.getKrankheit;
das habe ich mitlerweile selber schon herrausbekommen. Ich konnte aber komischerweise Trozdem darauf zugreifen... warum eigentlich?

@deddyH:
Ich hab das jetzt so gelößt:
Delphi-Quellcode:
  TTier = class
  private
    procedure sAlter(NeuesAlter:integer);
  protected
    pArt:string;
    pAlter:integer;
    pGeschlecht:string;
    pKrankheit:string;
  public
    constructor Create(Krankheit:string; Geschlecht:string; Art:string);
    destructor Destroy;
  published
    property getTierart:string read pArt;
    property getAlter:integer read pAlter;
    property getGeschlecht: string read pGeschlecht;
    property getKrankheit:string read pKrankheit;

    property setAlter:integer write sAlter;
    property setKrankheit: string write pKrankheit;
    property setGeschlecht: string write pGeschlecht;
    property setTierart: string write pArt;
  end;
geht das so oder verstößt das total gegen die Programmierer-Ehtik?

gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Class -->Error

  Alt 9. Jan 2009, 17:56
Getter und Setter sind in der Regel Funktionen und Prozeduren, auf die über Properties zugegriffen wird und in denen die Verarbeitung der Attribute gezielt geregelt wird.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.673 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Class -->Error

  Alt 9. Jan 2009, 17:56
Zitat von Teekeks:
Ich konnte aber komischerweise Trozdem darauf zugreifen... warum eigentlich?
Innerhalb der Unit, in der die Klasse deklariert ist, hat private keine Wirkung.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Class -->Error

  Alt 9. Jan 2009, 17:56
Das ist so nicht im Sinne der OOP. Du hast eine Property (z.B. Name), welche über einen sog. Getter (z.B. GetName) ausgelesen und einen sog. Setter (z.B. SetName) gesetzt wird. Den Getter kannst Du meist auch weglassen und gleich den Feldinhalt zurückgeben, aber ein Setter kann zur Überprüfung ganz nützlich sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf