Hallo zusammen,
es geht um folgenden Code:
"
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
const
m_erde = 5.974E27;
a_erde = 149.6E9;
e_erde = 0.0167;
m_sonne = 1.9884E30;
ekl_erde = 0; {Grad}
perihel_erde = 30; {Grad}
Genauig= 100;
scale = 1 / 1E9;
type
vek3d = record
x,y,z,r : double;
end;
Himob = class
constructor create(halbachse,exzentr,masse,massezentr,per,ekl: double);
procedure run;
public
X,Y,Z,Phi,R,V,m,m_z,a,e,perihel,ekliptik : double;
animated: boolean;
Bahndaten : array[0..Genauig*360] of vek3d;
end;
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
Erde : Himob;
implementation
{$R *.lfm}
constructor Himob.Create(halbachse,exzentr,masse,massezentr,per,ekl: double);
begin
inherited Create;
a:=halbachse;
e:=exzentr;
m:=masse;
m_z:=massezentr;
Perihel:=per;
Ekliptik:=ekl;
animated:=false;
end;
procedure Himob.run;
begin
animated:=true;
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Erde.Create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
Erde.run;
end;
end.
"
Im Prinzip alles recht simpel (die Himob-Klasse soll einen Planeten simulieren).
Das Kompilieren geht fehlerfrei;
Beim Starten bricht er ab mit SIGSEGV error und verweist auf die Zeile
" animated:=true; "
Ich habe hier auf getter und setter verzichtet (ja ich weiss, schlechter Stil).
Was ich nicht verstehe:
Wenn ich die Methode Himob.run weglasse und nur den constructor aufrufe startet alles fehlerfrei.
Die Initialisierung der Variablen klappt also... , wenn ich mit .run aber dann die boolean Variable setzen will kommt der SIGSEGV Fehler.
Woran liegt das ?
Gruss Zwerg.
kompiliert, aber bei start SIGSEGV error
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: kompiliert, aber bei start SIGSEGV error
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
Erde:= Himob.Create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
Erde.run;
"
[*code=laz]
procedure TForm1.FormCreate(Sender: TObject);
begin
Erde:= Himob.Create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
Erde.run;
[*/code]
"
Re: kompiliert, aber bei start SIGSEGV error
Hallo und willkommen im Lazarusforum!
Zur Frage: Der Konstruktor muss von der Klasse, nicht von der Instanz aufgerufen werden (https://www.delphi-treff.de/object-pasc ... igeben/#m2):
PS: In Pascal ist es üblich dem Klassenbezeichner mit einem T starten zu lassen (z.B. THimob statt Himob).
PS2: Wenn du den Code hier im Forum per Highlighter setzt, ist er leichter lesbar.
Zur Frage: Der Konstruktor muss von der Klasse, nicht von der Instanz aufgerufen werden (https://www.delphi-treff.de/object-pasc ... igeben/#m2):
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
Erde := Himob.create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
Erde.run;
end;
PS2: Wenn du den Code hier im Forum per Highlighter setzt, ist er leichter lesbar.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: kompiliert, aber bei start SIGSEGV error
Hallo,
Danke euch für eure Ratschläge !
"Zur Frage: Der Konstruktor muss von der Klasse, nicht von der Instanz aufgerufen werden"
wie peinlich.
So jetzt läufts. Danke.
Gruss Zwerg
Danke euch für eure Ratschläge !

"Zur Frage: Der Konstruktor muss von der Klasse, nicht von der Instanz aufgerufen werden"

So jetzt läufts. Danke.
Gruss Zwerg