Работа с классами в FPC

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Работа с классами в FPC

Сообщение Ferrum » 25.10.2009 16:36:53

До этого работал только с объектами, никаких накладок не возникало.
Взялся за изучение классов. Пишу:

Код: Выделить всё
program Project1;

{$mode delphi}{$codepage utf8}{$H+}

uses
  SysUtils, Windows;

type
  MyClass = class(TObject)
  private
    sName : String;
    iNumber : Integer;
    eValue : Extended;
    bState : Boolean;
  public
    constructor Create; overload;
    constructor Create(nam : String); overload;
  published
    property Name : String read sName;
    property Number : Integer read iNumber;
    property Value : Extended read eValue;
    property State : Boolean read bState;
  end;

var
  Class1, Class2 : MyClass;

constructor MyClass.Create;
begin
  inherited Create;
  sName := 'Default';
  randomize;
  iNumber := random(100);
  randomize;
  eValue := random + random(10);
  bState := true;
end;

constructor MyClass.Create(nam : String);
begin
  inherited Create;
  sName := nam;
  randomize;
  iNumber := random(100);
  randomize;
  eValue := random + random(10);
  bState := true;
end;

begin
  Class1.Create;
  Class2.Create('MyClass2');
  MessageBox(0, PChar(Class1.Name), 'Name of Class1', 0);
end.


Программа компилируется, но вылетает с ошибкой
Project project1.exe raised exeption class 'External : SIGSEGV'

IDE указывает на строку
Код: Выделить всё
MessageBox(0, PChar(Class1.Name), 'Name of Class1', 0);


IDE - Lazarus 0.9.29, LCL не используется
На стандартном FPC IDE та же хрень, только ошибка
An unhandled exeption occurred
EAccess Violation : Access violation
$00401631

Delphi подобное вообще не компилит

Незнаю в чём дело, помоему чего-то в классах напортачил
Подскажите, кто знает, пожалуйста, в чём дело...
Аватара пользователя
Ferrum
новенький
 
Сообщения: 14
Зарегистрирован: 27.08.2009 10:11:53

Re: Работа с классами в FPC

Сообщение Mr.Smart » 25.10.2009 17:17:08

Код: Выделить всё
...
Class1:=MyClass.Create;
Class2:=MyClass.Create('MyClass2');
...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Работа с классами в FPC

Сообщение Vadim » 25.10.2009 19:19:26

Ferrum
Перед тем как что либо делать с переменной типа класс, надо выделить память для неё, с помощью метода самого класса Create. Пример - см. выше.
Access Violation - типичная ошибка, когда объект ещё не создан, либо уже удалён из памяти с помощью метода Free. Т.е. вместо адреса объекта в переменной находится какая-то шелуха.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru