Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизОбъект в объекте Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c