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

Вниз

Объект в объекте   Найти похожие ветки 

 
Sam Stone ©   (2004-12-14 20:01) [0]

Доброго времени суток
Можно ли писать так?
TGameField=class(TComponent)
...
 TestField:TGameField;
...
end;
Сейчас у меня генерится AV в конструкторе при создании TestField
constructor TGameField.Create(AOwner: TComponent);
begin
 Inherited Create(AOwner);//Исключение здесь
 ...
end;
Оно правильно на меня ругается?
Ничего "извращенного" нету. В конструкторе я просто инициализирую некоторые переменные.


 
jack128 ©   (2004-12-14 20:06) [1]

Какие нить виртуальные методы Component"a перекрываешь? И вообще ставишь в опция проэкта Use debug dcu"s и иcследуешь, где имено у тя AV.


 
Arnold ©   (2004-12-14 20:22) [2]

type
PGameField=^TGameFiled;
TGameField=class(TComponent)
...
TestField:PGameField;
...
end;


 
Sam Stone ©   (2004-12-14 20:23) [3]

Из перекрываемых мной только Create и Destroy. Остальное не трогаю.
constructor TComponent.Create(AOwner: TComponent);
begin
 FComponentStyle := [csInheritable];//ЗДЕСЯ АВ - никаких предположений
 if AOwner <> nil then AOwner.InsertComponent(Self);
end;


 
Arnold ©   (2004-12-14 20:28) [4]

так ты какой класс пишешь?
TComponent или TGameFiled?
наверна надо так написать
сonstructor TGameFiled.Create(AOwner: TComponent);


 
jack128 ©   (2004-12-14 20:30) [5]

Sam Stone ©   (14.12.04 20:23) [3]
Покажи как создаешь объект? Случайно не так:
var
Obj: TGameField;
begin
 Obj.Create(nil);
end;

?? ;-)


 
Sam Stone ©   (2004-12-14 20:34) [6]

Пишу TGameField
Но при дебаге дошел до конструктора TComponent.

2Arnold
Создание проглотил, но далее начинает жутко ругаться при создании массива.
 TFieldElement = class(TComponent)
 private
   FType: TPointState;
   FDirection: TDirection;
 public
   Constructor Create(AOwner: TCOmponent);
 end;
 TField = array [1..10,1..10] of TFieldElement;

Теперь каждому элементу New придется делать?


 
Sam Stone ©   (2004-12-14 20:40) [7]

2jack128
GameField:=TGameField.Create(Application);

Если только вот где косяк:
 TestField.Create(nil);//внутри самого GameField

Но сейчас притащил Application (И напрямую, и через параметры процедуры) - все равно ругается


 
DiamondShark ©   (2004-12-14 20:52) [8]


> Если только вот где косяк:
>  TestField.Create(nil);//внутри самого GameField

Во-первых,
TestField := TGameField.Create(Self);

Во-вторых, надеюсь, эта строчка не в конструкторе?


 
Arnold ©   (2004-12-14 20:52) [9]

у тебя TestField то не существует как ты можешь вызывать у него конструктор.
пиши также как и для GameFiled и все будет ок.

а насчет этого
TField = array [1..10,1..10] of TFieldElement;
то делай вот так
Field:TField;
for I:=1 to 10 do
for J:=1 to 10 do
Filed[I,J]:=TFiledElement.Create(self);
и сё


 
Arnold ©   (2004-12-14 20:55) [10]

DiamondShark
а что если и в констуркторе??
Он же как раз и существует чтоб создавать и инициализировать переменные класса
конечно они должны следжовать за словом inherited Create(AOwner)


 
DiamondShark ©   (2004-12-14 20:58) [11]


> Arnold ©   (14.12.04 20:55) [10]
> DiamondShark
> а что если и в констуркторе??

Да ничего.
Просто тогда встаёт вопрос: а как и где прерывается цепочка вложенности? ;-)


 
Sam Stone ©   (2004-12-14 21:02) [12]

2DiamondShark
Кидай в меня тухлыми помидорами.
Да и все остальные тоже. Клинит меня периодически на такие тупости. Так и тянет написать объект.create() :(((
Прошу прощения за ложную тревогу


 
Arnold ©   (2004-12-14 21:09) [13]

Хотя извеняюсь у тебя же создается объект этого же клаасса.
Тогда да нельзя в констуркторе этого писать.
У тебя все должно подвиснуть из за рекурсии


 
Sam Stone ©   (2004-12-14 21:12) [14]

TestField я не в конструкторе создаю. Ошибка уже всплыла.
Не TestField.Create(nil);, как у меня (ну очень-очень стыдно ;(((), а TestField := TGameField.Create(Self);
Просто в самом начале засомневался в возможности реализации класса в самом себе, вот и ломанулся на форум.



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

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

Наверх




Память: 0.5 MB
Время: 0.035 c
1-1102521272
ali_t
2004-12-08 18:54
2004.12.26
как перевести PChar в string


10-1074661134
user
2004-01-21 07:58
2004.12.26
Про DCOM


1-1102417746
COOLer
2004-12-07 14:09
2004.12.26
подсветка букв в RichEdit


1-1102691235
Ольга
2004-12-10 18:07
2004.12.26
Почему плодятся процессы EXCEL.EXE (D6, Excel 2000)


1-1103013863
R
2004-12-14 11:44
2004.12.26
Округление до целого