Главная страница
    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.033 c
1-1102497058
TUser
2004-12-08 12:10
2004.12.26
Одна консоль на двоих и много на одного


4-1100421549
DeepProg
2004-11-14 11:39
2004.12.26
Вызвать контекстное меню Windows Explorer для файла/папки


1-1101943402
Dmitry_04
2004-12-02 02:23
2004.12.26
Свойства файла


1-1102528398
Leaner
2004-12-08 20:53
2004.12.26
Присоединение к проекту файла: *tlb


1-1103034443
redlord
2004-12-14 17:27
2004.12.26
TThread. ожидание второго потока.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский