![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос по классам [D7, WinXP]
Антоныч © (2004-10-05 16:27:00)Кто хорошо шарит в ООП, посмотрите, плз, почему при нажатии Button1 выдает Access Violation? А то я только недавно начал вникать в ООП.
type
TMyClass1=class (TObject)
zn: integer;
constructor Create;
procedure Set_zn(const Value: integer);
property G_zn: integer read zn write Set_zn;
destructor Destroy;
end;
type
TMyClass2=class (TObject)
Field1: TMyClass1;
constructor Create;
destructor Destroy;
end;
var
Form1: TForm1;
MyClass2:TMyClass2;
implementation
{$R *.dfm}
{ TMyClass1 }
constructor TMyClass1.Create;
begin
Create;
end;
destructor TMyClass1.Destroy;
begin
destroy;
end;
procedure TMyClass1.Set_zn(const Value: integer);
begin
zn:=Value;
end;
{ TMyClass2 }
constructor TMyClass2.Create;
begin
Create;
end;
destructor TMyClass2.Destroy;
begin
destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyClass2.Field1.G_zn:=5;
end;
end.
Amoeba (2004-10-05 17:12:00) [1]А для второго класса это сделал?
Далее:
procedure TForm1.Button1Click(Sender: TObject);
begin
MyClass2.Field1.G_zn:=5;
end
А экземпляр MyClass2 у тебя до этого был создан таким макаром?
MyClass2 := TMyClass2.Create;
Basken (2004-10-05 17:11:00) [2]Неплохо было бы для начала создать экземпляр TMyClass1 ( Field1 Куда смотрит ?), а потом уже обращаться к методам и свойствам....
Суслик (2004-10-05 17:10:00) [3]
> Изменил как посоветовали - все равно ругается :)
И что ты хочешь?
Чтобы не ругался? Тогда создай этот свой MyClass
MyClass2 := TMyClass2.create();
Антоныч (2004-10-05 16:58:00) [4]Изменил как посоветовали - все равно ругается :). Блин, пример-то наипростейший.
Andy BitOff (2004-10-05 16:36:00) [5]Книги надо читать, там про все написано.
А "код" это выкини и никому не показывай.
Amoeba (2004-10-05 16:36:00) [6]И второе:
должно быть
constructor TMyClass1.Create;
begin
inherited;
end;
destructor TMyClass1.Destroy;
begin
inherited;
end;
А то у тебя получается в этих методах бесконечный вызов самих себя! Читай учебник по Delphi.
Amoeba (2004-10-05 16:34:00) [7]У ВСЕХ деструкторов в опиманиях классов нужно, во-первых, добавить "магическое слово" override.