1

Тема: Створення простого класу

Вітаю, Слава Україні!

Windows 10 x64, Lazarus 2.2.4, FPC 3.2.2

Допоможіть знайти помилку в коді класу. З класами раніше не працював.

Намагаюсь створити простий клас для подальшого вдосконалення

unit Unit1;

{$mode ObjFPC}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

type
  TObjLamp = class
   public
    fname:string;
    fcolor:string;
    constructor Create(NewName, NewColor:string);
    destructor Destroy; override;

    property name: string read fname write fname;
    property color: string read fcolor write fcolor;
  end;

  var
    Form1: TForm1;

  implementation

  {$R *.lfm}

  {TMyObject}

constructor TObjLamp.Create(NewName, NewColor:string);
 begin
  name:=  NewName;
  color:= NewColor;
 end;

destructor TObjLamp.Destroy;
 begin
  inherited;
 end;

procedure TForm1.Button1Click(Sender: TObject);
 var
  Lamp1:TObjLamp;
 begin
  Lamp1.Create('Lamp Red', 'Red');
  ShowMessage('Name: '+Lamp1.name+' Color: '+Lamp1.color);
 end;

end.  

Проект компілюється але при натисканні на кнопку виникає помилка
Проект ... зазнав винятку класу 'External:ACCESS VIOLATION' Access violation reading from address $000000000000FDC8

В Delphi7 даний код працює хоча і виникає помилка після закриття програми але виводить назву та колір Lamp1.

2

Re: Створення простого класу

Замініть

Lamp1.Create('Lamp Red', 'Red');

на

Lamp1 := TObjLamp.Create('Lamp Red', 'Red');

До виклику конструктора Lamp1 не існує, і будь-який виклик Lamp1.щось-там буде некоректним (хоча і не обов'язково призводитиме до помилки).

Подякували: wgoganet, leofun012