Текущий архив: 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.47 MB
Время: 0.074 c