![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Код:
unit Uclss; interface uses Dialogs; type TClass = class Fstr: String; end; implementation end. Код:
unit prjct;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
pB: TButton;
procedure pBClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TForm1;
implementation
{$R *.dfm}
uses
Uclss;
var
Cls: TClass;
procedure TForm1.pBClick(Sender: TObject);
begin
Cls.Fstr := 'WTF';
end;
end. Пpoeкт prject.exe вызвaл иcключeниe клacca EAccessViolation c cooбщeниeм 'Access violation at address ... при нажатии на кнопку pB |
|
#2
|
|||
|
|||
|
Нельзя обратиться к полю класса. Можно обратиться к ЭКЗЕМПЛЯРУ клсаа. Проще говоря, надо создать объект нужного класса:
Код:
var Cls: TClass; procedure TForm1.pBClick(Sender: TObject); begin Cls := TClass.Create; // Создаем объект - экземпляр класса Cls.Fstr := 'WTF'; Cls.Free; // Не забываем уничтожить объект после того, как он больше не нужен. end; |
|
#3
|
|||
|
|||
|
Спасибо!
Цитата:
|
|
#4
|
|||
|
|||
|
Пример нагугленный:
Цитата:
Последний раз редактировалось ][enk, 17.03.2009 в 23:17. |
|
#5
|
|||
|
|||
|
Пример правильный, просто там подразумевается, что объект создается где-то в другом месте. По поводу второго вызова Free; Ну, после первого вызова объект уже удален, так что ты опять обращаешся к несуществующему объекту. Кстати, при уничтожении объекта указатель на него не становится равным Nil. Вот так вот.
|
|
#6
|
|||
|
|||
|
интересно! То есть можно принудительно его(укозатель на объект) прировнять к NIL, чтобы повторный вызов Free не вызывал ааврийного завершения?
|