AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen innerhalb von Klassen

Ein Thema von Socke_SG · begonnen am 1. Jun 2010 · letzter Beitrag vom 1. Jun 2010
Antwort Antwort
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#1

Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 15:57
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
    Reactor: TFReactor; eingebunden wird. Dies klappt dann auch soweit ganz gut...

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...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 15:59
Hast du auch eine Instanz erzeugt?
Markus Kinzler
  Mit Zitat antworten Zitat
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#3

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:00
Meinste über Create?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:02
Ja.
welche Fehlermeldung kommt genau?
Markus Kinzler
  Mit Zitat antworten Zitat
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#5

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:09
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"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:10
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#7

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:16
HA!!! Super. Jetzt klappts. Vielen Dank an euch!!!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:17
Zitat von Socke_SG:
HA!!! Super. Jetzt klappts. Vielen Dank an euch!!!
Bin ich so dick
Gerngeschehen
Markus Kinzler
  Mit Zitat antworten Zitat
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#9

Re: Variablen innerhalb von Klassen

  Alt 1. Jun 2010, 16:20
Sorry meinte an DICH!!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 18:39 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