Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
4-1100266595
kalishenko
2004-11-12 16:36
2004.12.26
Версия MSOffice


1-1102957647
denis24
2004-12-13 20:07
2004.12.26
кодирование в MD5


1-1102610657
hamster
2004-12-09 19:44
2004.12.26
Turbo Pascal - блокировка некоторых клавиш


4-1100415377
Hensin
2004-11-14 09:56
2004.12.26
Выход из ждущего режима


4-1100012387
Eraszer
2004-11-09 17:59
2004.12.26
Hint из панели задач в стиле "Нехватает виртуальной памяти"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский