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

Вниз

Перечисляемый тип в качестве свойства класса.   Найти похожие ветки 

 
Cranium ©   (2003-10-31 14:19) [0]

Ситуация следующая объявляютип
type AliasState = (aView, aClose);
далее
type
TAliasDB = Class
private
Status: AliasState;
function StateRead: AliasState;
.........
public
constructor Create; overload;
property State: AliasState read StateRead;
end
implementation

constructor TAliasDB.Create;
begin
Status:=aClose;
end;

function TAliasDB.StateRead: AliasState;
begin
Result:=Status;
end;


Так вот при чтении свойства State возникает ошибка в функци StateRead "Access violation at address ... in module .. Read address .." В чем грабли?


 
Юрий Зотов ©   (2003-10-31 14:26) [1]

1. Например, в том, что не создан объект.
2. Уберите overload.


 
Cranium ©   (2003-10-31 14:33) [2]

Нет объект класса создан. overload не могу убрать у меня несколько конструкторов класса


 
Юрий Зотов ©   (2003-10-31 14:37) [3]

И все-таки еще раз проверьте, создан ли объект.

А в приведенном Вами коде ошибок нет. Есть некоторые корявости, но это не ошибки. Ищите их где-то снаружи.


 
Reindeer Moss Eater ©   (2003-10-31 14:37) [4]

Наследуешся от TOblect.

Рисуешь свой конструктор, который заменяет стат. конструктор TObject. Который не вызывается.
У тебя не создается экземпляр одним словом.


 
Nikolay M. ©   (2003-10-31 14:37) [5]

Можно посмотреть на код в Create и как создается объект?


 
Reindeer Moss Eater ©   (2003-10-31 14:38) [6]

constructor Create; overload;

Нельзя переопределить статический метод


 
Юрий Зотов ©   (2003-10-31 14:41) [7]

> Reindeer Moss Eater

Overload - это не override. Конструктор остается статическим, прячет конструктор предка и при явном указании класса будет вызван.


 
Cranium ©   (2003-10-31 14:43) [8]


> У тебя не создается экземпляр одним словом.

Экземпляр чего класса TAliasDB? Так все остальные свойства читаются. Или экземляр AliasState так в приват процедурах и функция все работет...


 
Cranium ©   (2003-10-31 14:47) [9]


> Можно посмотреть на код в Create и как создается объект?

procedure TFormLoginParam.FormCreate(Sender: TObject);
var
Alias: TAliasDB;
begin
.......
Alias:=TAliasDB.Create;
.......
end;


 
Reindeer Moss Eater ©   (2003-10-31 14:49) [10]

Alias:=TAliasDB.Create;

Вызывается статический конструктор TAliasDB.
Разве в нем будет вызван TObject.Create ?


 
Cranium ©   (2003-10-31 14:52) [11]

А как же тогда надо?


 
Nikolay M. ©   (2003-10-31 14:52) [12]

Кстати, у меня в Д6 все работает нормально:

procedure TForm1.Button2Click(Sender: TObject);
var
t : TAliasDB;
begin
t := TAliasDB.Create;
ShowMessage (IntToStr (integer(t.State)))
end;

дает 1.

Может у тебя где-то еще определены TAliasDB, aClose и тп?


 
Юрий Зотов ©   (2003-10-31 15:11) [13]

> Reindeer Moss Eater © (31.10.03 14:49) [10]

Не будет, поскольку в TAliasDB.Create нет вызова inherited. Но это и не требуется. Объект все равно создается, причем вполне корректно.



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

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

Наверх




Память: 0.49 MB
Время: 0.026 c
14-41968
REA
2003-10-17 11:47
2003.11.13
Работа в Твери: требуются софтостроители


1-41718
Yuri Btr
2003-11-03 16:50
2003.11.13
Глюк с TSpeedButton ?


1-41565
AndreyA
2003-10-27 16:04
2003.11.13
HTML


6-41791
Demetrius
2003-09-17 19:10
2003.11.13
Как получить дату файла по FTP


3-40806
axx
2003-10-22 13:07
2003.11.13
Footers in DBGridEH