SIGSEGV bei Zugriff auf Feld in einer anderen Klasse

Für Fragen von Einsteigern und Programmieranfängern...

SIGSEGV bei Zugriff auf Feld in einer anderen Klasse

Beitragvon JeyJey » 30. Nov 2017, 18:09 SIGSEGV bei Zugriff auf Feld in einer anderen Klasse

Hallo liebe Community,

ich bin noch etwas neu in der Lazarus und Pascal-Welt.

Ich teste grade ein wenig mit Klassen, Feldern und Eigenschaften herum.

Folgendes Problem, ich habe mir eine Test-Klasse angelegt, und in dieser ein Feld angelegt. Jetzt erstelle ich in einer Klasse B ein Objekt der Klasse A und möchte dann in Klasse B auf das Feld zugreifen. Hier kommt dann der SIGSEGV

Klasse A

Code: Alles auswählen
unit test;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils;
 
type
  TTest = class
  public
    Value: integer;
    constructor Create();
  end;
 
implementation
 
constructor TTest.Create;
begin
  inherited;
  Value := 0;
end;
 
end.       


Klasse B

Code: Alles auswählen
unit gui;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  test;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    t:TTest;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  t.Create();
  ShowMessage(IntToStr(t.Value));
end;
 
end.           


Ich weiß, das der SIGSEGV immer etwas damit zu tun hat, das ich auf etwas zugreifen möchte was nicht da ist. Aber das Feld Value ist ja "nur" ein integer, das heißt hier muss ich diesen ja nicht erst erstellen, bzw. ich initialisiere ihn anfangs auch mit einem Wert.

Was übersehe ich hier?

Vielen dank für eure HIlfe


Gruß
JeyJey
 
Beiträge: 9
Registriert: 22. Sep 2016, 08:55

Beitragvon Michl » 30. Nov 2017, 19:28 Re: SIGSEGV bei Zugriff auf Feld in einer anderen Klasse

JeyJey hat geschrieben:
Code: Alles auswählen
  t.Create()

Du musst mit dem Class Construktor eine Instanz erstellen und zuweisen:
Code: Alles auswählen
  t := TTest.Create;
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2260
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried