Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 07:46   #1
Tora1000
 
Регистрация: 14.12.2009
Сообщений: 4
По умолчанию Как создать объект в Delphi из класса у которого объявлен только родитель?

Я новичок именно в ООП. У меня есть 2 класса TShpere и его родитель TGLScene.
При объявлении объекта (VAR):
Sphere: array [1..n] of TGLSphere; - компилятор ругается.
При Sphere: array [1..n] of TGLSсene; - проходит.
Пробовал также объявлять:
CSphere: array [1..n] of TGLSphere.CreateAsChild(Form1.GLSce ne1.Objects);
CSphere: array [1..n] of TGLScene.Create(AOwner: TGLSphere);
В большинстве случаев компилятор либо отправляет проверять подключенные модули, либо ругается на ошибку синтаксиса.
Tora1000 вне форума Ответить с цитированием
Старый 14.12.2009, 08:00   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Sphere: array [1..n] of TGLSphere; - компилятор ругается.
А че ругается? Че пишет-то?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 14.12.2009, 08:39   #3
Tora1000
 
Регистрация: 14.12.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
А че ругается? Че пишет-то?
Либо отправляет проверять список uses, либо говорит, что ошибка синтаксиса...
Во всех случаях, кроме Sphere: array [1..n] of TGLSсene;
Кроме раздела VAR ничего больше не объявлял. Может требуется как-то явно указать, что у TGLSphere родитель ТGLScene?
Tora1000 вне форума Ответить с цитированием
Старый 14.12.2009, 08:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
либо ругается на ошибку синтаксиса.
Правильно делает. Так нельзя обьявлять массивы. Это тебе не Си.
Цитата:
отправляет проверять подключенные модули
Тоже правильно. Скорее всего у тя не прописан путь в модулю с TGLSphere.
Кака у тя Делфи я не знаю но теб нужно добавть путь тому модулю в Library Path в настройках Делфи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2009, 09:38   #5
Tora1000
 
Регистрация: 14.12.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Скорее всего у тя не прописан путь в модулю с TGLSphere.
Да, но родительский компонент GLScene работает с TGLSphere;
Здесь нашел что-то подобное:
"За сферы в GLScene отвечает класс TGLSphere. Казалось бы, можно написать так:
Sphere:=TGLSphere.Create
Однако команда работать не будет, так как каждому объекту в GLScene надо зарегистрироваться в очереди объектов. Кроме того, объект нельзя создать в “пустоте”, он должен быть привязан к какому-то объекту более высокого уровня. Корневой объект самого высокого уровня — glscene1.Objects (если объект компонента TGLScene у вас называется glscene1). Правильный вариант:
Sphere:=TGLSphere (glscene1.Objects.AddNewChild(TGLSp here))
Разберем эту строчку по частям. У корневого объекта glscene1.Objects мы вызываем метод AddNewChild, который добавляет в корень объект класса, указанный в параметре (в данном случае это сфера — TGLSphere). Так тоже можно: в параметры процедурам передавать не объекты, а целые классы. Зачем перед присвоением нужно преобразование типа к TGLSphere? Дело в том, что метод AddNewChild, что бы вы ему в параметр ни передали, возвращает объект класса TGLBaseSceneObject. Нас это не устраивает, поэтому мы и преобразуем тип к TGLSphere. Получившийся объект присваивается переменной Sphere. Теперь с помощью этой переменной мы можем нашей пуле задать разные параметры, например положение в пространстве
"
http://www.igromania.ru/Articles/402...ze_GLScene.htm


Но там не указано: какого типа переменная Sphere, а при попытке некоторому типу :=TGLSphere (glscene1.Objects.AddNewChild(TGLSp here)), снова ругается, что не знает TGLSphere.
Tora1000 вне форума Ответить с цитированием
Старый 14.12.2009, 10:30   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да, но родительский компонент GLScene работает с TGLSphere;
Ты все-тки проверь пути и подключи модули нужные.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2009, 11:57   #7
Tora1000
 
Регистрация: 14.12.2009
Сообщений: 4
По умолчанию

Спасибо всем, действительно были не все модули подключены, в частности GLObjects
Tora1000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать объект на форме? tns-ka Microsoft Office Excel 2 13.12.2009 21:34
Как мне создать вот такой объект? Тупой Microsoft Office Excel 2 10.12.2009 00:12
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Как узнать, создавался ли уже объект класса? TwiX Общие вопросы Delphi 4 06.10.2009 09:44