Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variablen innerhalb von Klassen (https://www.delphipraxis.net/151783-variablen-innerhalb-von-klassen.html)

Socke_SG 1. Jun 2010 14:57


Variablen innerhalb von Klassen
 
Hallo zusammen. Ich hoffe, ich poste das hier thematisch richtig.

Es geht um folgendes: Ich habe eine Klasse freactor erstellt. In dieser werden einzelne Größen berechnet usw. Unter anderem beinhaltet diese Klasse Variablen, die als private deklariert sind. Das ganze sieht in etwa so aus:

Delphi-Quellcode:
type TFReactor = class(TObject)
  private
    temperature: extended;
    pressure: extended;
    bstoff: integer;
    firing: boolean;
  public
    procedure Create;
    function Energyproduction(temp, pres: extended; bs: integer): extended;
    function DeterminePressure(temp: extended; bs: integer): extended;
    function DetermineTemperature(bs: integer; triggerenergy: extended): extended;
    function Lawson(temp, pres: extended): extended;
end;
Nun möchte ich diese Klasse aus dem Hauptprogramm aufrufen, wo die Klasse über
Delphi-Quellcode:
    Reactor: TFReactor;
eingebunden wird. Dies klappt dann auch soweit ganz gut...

Delphi-Quellcode:
label193.caption:=FloatToStr(Reactor.energyproduction(temp,pres,deuterium));
Das Problem ist nur, dass wenn ich INNERHALB der Klassen-Unit eine private-Variable ändern will (z.B. firing:=true;) dann gibt es ne Fehlermeldung. Also eine Zugriffsverletzung. Compilieren tut er jedoch einwandfrei...

Ist das erste mal, dass ich wirklich eine eigene Klasse erstelle. Hoffe mir kann da jemand helfen...

mkinzler 1. Jun 2010 14:59

Re: Variablen innerhalb von Klassen
 
Hast du auch eine Instanz erzeugt?

Socke_SG 1. Jun 2010 15:00

Re: Variablen innerhalb von Klassen
 
Meinste über Create?

mkinzler 1. Jun 2010 15:02

Re: Variablen innerhalb von Klassen
 
Ja.
welche Fehlermeldung kommt genau?

Socke_SG 1. Jun 2010 15:09

Re: Variablen innerhalb von Klassen
 
Also ich geb hier mal alles was dazu wichtig ist:

Das hier ist die Klassen-Unit:

Delphi-Quellcode:
unit fusionsreactor;

interface

type TFReactor = class(TObject)
  private
    temperature: extended;
    pressure: extended;
    dbstoff: integer;
    firing: boolean;
  public
    procedure Create;
    function Energyproduction(temp, pres: extended; bs: integer): extended;
    function DeterminePressure(temp: extended; bs: integer): extended;
    function DetermineTemperature(bs: integer; triggerenergy: extended): extended;
    function Lawson(temp, pres: extended): extended;
  end;

implementation

procedure TFReactor.Create;
begin
  temperature := 0.0;
  pressure   := 0.0;
  bstoff     := 0;
  firing     := false;
end;


function TFReactor.energyproduction(temp, pres: extended; bs: integer): extended;
var lawsoncrit: extended;
begin
lawsoncrit:= 1E+20;
  if pres*temp>lawsoncrit then begin
    result:= (1E+17)*deut;
    firing:=true;
  end else
    result:= 0.0;
end;

function TFReactor.DeterminePressure(temp: extended; bs: integer): extended;
var molarvolume, gasconstant: extended;
begin
  gasconstant:=8.314472; //J/(mol*K)
  molarvolume:= 0.00403*deut/(113.09724);
  result:= gasconstant*temp/gasconstant;
end;

function TFReactor.DetermineTemperature(bs: integer; triggerenergy: extended): extended;
var boltzmann: extended;
begin
  boltzmann:= 1.3806504E-23;
  result:= 2.0*triggerenergy*boltzmann/3.0;
end;

function TFReactor.Lawson(temp,pres: extended): extended;
begin
  result:= temp*pres;
end;

end.
und das hier ist im Hauptprogramm:

Deklaration:

Delphi-Quellcode:
public
...
   Reactor: TFusionReactor;
...
Aufruf:
Delphi-Quellcode:
Reactor.Create
label193.caption:=FloatToStr(Reactor.energyproduction(temp,pres,bstoff));
Die Fehlermeldung ist:
"Zugriffsverletzung bei Adresse 0050573E in Modul 'frtest.exe'. Schreiben von Adresse 00000008"

mkinzler 1. Jun 2010 15:10

Re: Variablen innerhalb von Klassen
 
Delphi-Quellcode:
Reactor := TFusionReactor.Create;
Zudem sollte Create ein Konstructor sein

Delphi-Quellcode:
type TFReactor = class(TObject)
  private
    temperature: extended;
    pressure: extended;
    dbstoff: integer;
    firing: boolean;
  public
    constructor Create;
    function Energyproduction(temp, pres: extended; bs: integer): extended;
    function DeterminePressure(temp: extended; bs: integer): extended;
    function DetermineTemperature(bs: integer; triggerenergy: extended): extended;
    function Lawson(temp, pres: extended): extended;
  end;

implementation

constructor TFReactor.Create;
begin
  inherited;
  temperature := 0.0;
  pressure   := 0.0;
  bstoff     := 0;
  firing     := false;
end;

Socke_SG 1. Jun 2010 15:16

Re: Variablen innerhalb von Klassen
 
HA!!! Super. Jetzt klappts. Vielen Dank an euch!!!

mkinzler 1. Jun 2010 15:17

Re: Variablen innerhalb von Klassen
 
Zitat:

Zitat von Socke_SG
HA!!! Super. Jetzt klappts. Vielen Dank an euch!!!

Bin ich so dick :stupid:
Gerngeschehen

Socke_SG 1. Jun 2010 15:20

Re: Variablen innerhalb von Klassen
 
Sorry meinte an DICH!!! ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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