Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2010, 20:56   #1
BeenQ
 
Регистрация: 13.01.2007
Сообщений: 4
Вопрос Освоение ООП в Delphi

Доброго времени суток.
Не могу разобраться, как работать с полями и свойствами мною созданных объектов.
Пример кода:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyClass = class(TObject)
  private
    fi: Integer;
  published
    property i: integer read fi write fi;
  end;

var
  Form1: TForm1;
  MyClass: TMyClass;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyClass.i := 1;
end;

end.
При нажатии на кнопку Button1, вылезает ошибка:
Цитата:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0044D949 in module 'Project1.exe'. Write of address 00000004'. Process stopped. Use Step or Run to continue.
Что я делаю не так?

Последний раз редактировалось Stilet; 23.09.2010 в 10:34.
BeenQ вне форума Ответить с цитированием
Старый 22.09.2010, 20:59   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вы объявили экземпляр класса, но не инициализировали его
Добавте
Код:
var
  Form1: TForm1;
  MyClass: TMyClass; // Создается указатель на экземпляр класса (на сами данные объекта). На данный момент это ссылка в никуда

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyClass := TMyClass.Create; // Выделяется память под эти данные. В MyClass записывается указатель на начало данных
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MyClass.Free; // Освобождается память
end;

Последний раз редактировалось Sibedir; 22.09.2010 в 21:04.
Sibedir вне форума Ответить с цитированием
Старый 22.09.2010, 21:01   #3
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

Как минимум метод Create для своего объекта, а также метод Destroy по окончании работы.
baster128 вне форума Ответить с цитированием
Старый 22.09.2010, 21:13   #4
BeenQ
 
Регистрация: 13.01.2007
Сообщений: 4
По умолчанию

Sibedir, baster128, благодарствую. Разобрался.
BeenQ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освоение алгоритмов сортировки элементов двумерных массивов. николай28 Паскаль, Turbo Pascal, PascalABC.NET 1 31.05.2010 22:30
нужна помощь с ООП в delphi -COREY- Помощь студентам 22 12.10.2009 22:12
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
Освоение Паскаль. Помощь)) Не верь мне Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 21:23