Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Ошибка при присваивании   Найти похожие ветки 

 
McMurfy ©   (2003-09-04 19:00) [0]

Ситуация следующая:

Ta=class(TComponent)
...
end;

Tb=class(TPersistent)
protected
x:Ta;
public
constructor Create(...)...
end;

constructor Tb.Create;
begin
x:=nil; {!!!!!!!!!!!!!!!!!!!!!}
end;

На строке, помеченной криком души, вылетает Access Violation. При трассировке на этой строке получаем x=Inaccessible Value

Если кто знает, помогите пожалуйста, буду очень благодарен.


 
mrcat ©   (2003-09-04 19:01) [1]

constructor Tb.Create;
begin
inherited Create;
x:=nil; {!!!!!!!!!!!!!!!!!!!!!}
end;


 
me   (2003-09-04 19:07) [2]

Приведи код с вызовом конструктора


 
McMurfy ©   (2003-09-04 19:48) [3]

1. Inherited Create; у меня есть, пробовал его комментировать, не помогает.
2. Код с вызовом конструктора:
EntityList[EntityCount-1]:=TEntity(FindClass(FEntityClass)).Create(FFm asApp,TempKeys);
В данном случает Ta - TFmasApp,Tb - TEntity


 
McMurfy ©   (2003-09-04 19:48) [4]

1. Inherited Create; у меня есть, пробовал его комментировать, не помогает.
2. Код с вызовом конструктора:
EntityList[EntityCount-1]:=TEntity(FindClass(FEntityClass)).Create(FFm asApp,TempKeys);
В данном случает Ta - TFmasApp,Tb - TEntity


 
me   (2003-09-04 19:53) [5]

type
TEntityClass = class TEntity;

EntityList[EntityCount-1]:= TEntityClass(FindClass(FEntityClass)).Create(FFmasApp,TempKeys) ;


 
McMurfy ©   (2003-09-04 20:00) [6]

На запись TEntityClass = class TEntity; у меня Делфи ругается.
Запись TEntityClass = class(TEntity); не помогла (да и не могла).
Запись TEntityClass = class of TEntity; тоже не помогла - все осталось как и раньше.


 
me   (2003-09-04 20:07) [7]

Я имел ввиду
TEntityClass = class of TEntity;

Классовую ссылку нельзя приводить к экземпляру класса.


 
me   (2003-09-04 20:14) [8]

АксессВайолэйшн при присвоении полю
обычно означает некорректный Self.
Такое обычно бывает либо при вызове конструктора
как обычного метода объекта при несозданном объекте,
либо, как у тебя, при приведении классовой ссылки к
экземпляру класса (т.е. с точки зрения компилятора это тоже
вызов конструктора как обычного метода, а указатель на
класс он трактует как указатель на экземпляр).

Трудно придумать какие-то ещё причины.
Проверь ещё раз что у тебя с Сэлфом всё впорядке.


 
Романов Р.В. ©   (2003-09-04 20:34) [9]

procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);



Страницы: 1 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-58671
pirat
2003-09-03 23:59
2003.09.18
халява с Synchronize


8-58791
Ricks
2003-05-12 22:22
2003.09.18
JPEG


1-58666
АлексейК
2003-09-08 13:10
2003.09.18
16-Bit сегмент в 32-Bit


1-58645
Olivka
2003-09-05 09:42
2003.09.18
как сделать, чтобы программа перезапустила саму себя


1-58747
pirat
2003-09-06 10:34
2003.09.18
Глюк TLabel и TCheckBox на прозрачной форме :(