ИЗВИНЯЮСЬ !!!
Не тот пример приклеил, должно быть, но проблема осталась
Код: Выделить всё
UserClass.CopyProp PROCEDURE(*BaseClass PtrClass)
ptrUser &UserClass
CODE
PARENT.CopyProp(PtrClass)
ptrUser &= PtrClass
^^^^^ Ошибка
SELF.NameUser = ptrUser.NameUser !!! НУЖНО ВЫПОЛНИТЬ !!!
где UserClass наследуемый от BaseClass
соответственно получаю ошибку Illegal reference assignment or
equivalence

(
Обнаружился ещё один вопрос:
Код: Выделить всё
p1 GROUP
fc1 &UserClass
END
p2 GROUP
fc2 &UserClass
END
pp1 LIKE(p1)
pp2 LIKE(p2), OVER(pp1) ! ВОТ ЗДЕСЬ РУГАЕТСЯ , т.е. не хочет выполнять OVER для груп содержащих ссылку
Как быть ?
--
Best regards,
Селин_К.Е.
(Добавление)
Совершенно правильно. Нельзя вместо наследника использовать родитиля.
Чревато большими проблемами. У родителя может не оказаться методов и свойств наследника. Наоборот можно.
WBR,
Nick Tsigouro. MailTo:
Nick@arsis.ru
А как можно по другому реализовать указанный ниже пример?
Нужно перебирать очедь объектов созданных от различных классов, созданных из базового класса.
Код: Выделить всё
BaseClass CLASS,TYPE
NameBase STRING(40)
Init PROCEDURE(STRING pName),VIRTUAL
CopyProp PROCEDURE(*BaseClass PtrClass),VIRTUAL
END
UserClass CLASS(BaseClass),TYPE
NameUser STRING(40)
Init PROCEDURE(STRING pName),VIRTUAL
CopyProp PROCEDURE(*BaseClass PtrClass),VIRTUAL
END
RefOneUserClass &BaseClass
RefTwoUserClass &BaseClass
MAP
END
CODE
RefOneUserClass &= NEW(UserClass)
RefTwoUserClass &= NEW(UserClass)
RefOneUserClass.Init('User')
RefTwoUserClass.CopyProp(RefOneUserClass)
Dispose(RefOneUserClass)
Dispose(RefTwoUserClass)
....
--
Best regards,
Селин_К.Е.
Строго говоря никак. Задачу нужно решать по другому. Очередь из объектов произвольного типа в клаше создать нельзя.
В этом примере оба объекта имеют BaseClass, и проблемы нет, но это наверно просто опечатка.
Как я понимаю, список (очередь) объектов нужен для того, чтобы потом искать нужный объект и обращаться к его методам. В этом случае нужно определять интерфейсы и в очередь помещать ссылки на интерфейсы. При этом не будет проблемы с тем, что экземпляры объектов принадлежат к разным классам. У них д.б. общие интерфейсы.
WBR,
Nick Tsigouro
В принципе, можно рискнуть и использовать ptrUser &= (PtrClass), но все(контроль), конечно будет взвалено на плечи программиста.
Best regards,
Andrew Listiev
Спасибо все кто ответил, решение нашлось, незнаю конечно насколько это правильно, НО РАБОТАЕТ !!!
Код: Выделить всё
UserClass.CopyProp PROCEDURE(BaseClass PtrClass)
ptrUser &UserClass
CODE
PARENT.CopyProp(PtrClass)
ptrUser &= Address(PtrClass)
SELF.NameUser = ptrUser.NameUser
--
Best regards,
Селин_К.Е.
Написал: ClaList(2)