![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
AS2.0, 8-ой флэш
Есть класс A: - при создании экземпляра которого создается экземпляр класса B: Экземпляр класса B должен "знать", какой экземпляр A его создал. Как это лучше организовать? В том варианте, который написал я, при проверке синтаксиса выдаются ошибки: A.as: Line 1: The name of this class, 'A', conflicts with the name of another class that was loaded, 'A'.
class A {
Причем, если создать fla-файл: var a:A = new A(); - то проверка синтаксиса в классах больше не выдает ошибок до первого редактирования этих классов..)) Можно, конечно, в классе B охарактеризовать переменную "а" не как A, а как Object, но тогда не будет проводиться проверка соответствия типов. Как быть? Извините за столь глупые вопросы)))
__________________
скриптограф |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 669
|
не вижу связи между кодом и ошибкой. Код рабочий. Ошибка говорит о каком-то конфликте имен. Исходники покажите
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Цитата:
Я столкнулся с такой ошибкой в реальном проекте, локализовал ошибку написав эти два примитивных класса для проверки и описал в первом посте, что у меня в них происходит. (Вы сделайте Check syntax в этих классах после их редактирования и до компиляции фла-файла). А реальная проблема такая: Есть класс "Битва", экземпляром которого создаются экземпляры класса "Танк", которые во время выполнения программы периодически создают экземпляры класса "Снаряд", которые при "попадании" в "танк" должны вызвать метод экземпляра "удалитьТанк" класса "Битва". Чтобы "снаряд" знал в каком экземпляре класса "Битва" он существует, в экземпляр класса "Танк" передается ссылка на экземпляр класса "Битва", которая потом передается в экземпляр класса "Снаряд", создаваемого экземпляром данного класса "Танк". Можно применить паттерн Обзервер, но я хочу разобраться конкретно с этим случаем.
__________________
скриптограф |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 528
|
Я знаком с этой ошибкой. Она, действительно, возникает тогда, когда классы взаимно ссылаются друг на друга. Причина ошибки, как я полагаю, в том, что компилятор не может понять, какой класс компилировать первым (в делфи эта ситуация известна под именем circular reference).
Решения, честно говоря, я тоже не знаю. Скажу только, что сейчас у меня есть только одно релизное приложение, в котором существует этот эффект. При должном проектировании, классы друг на друга у меня обычно не ссылаются. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Цитата:
Собственно это я и хотел услышать (что тут проблема проектирования и классы по хорошему не дожны взаимно ссылаться друг на друга). Или может у кого есть еще мнения?
__________________
скриптограф |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Это из разряда "физики шутят"?
Или что Вы имели в виду?)))) Кстати, уважаемый, у меня 9 месяцев уже висит штраф +4, а я даже не могу посмотреть за что - это нормально? ![]()
__________________
скриптограф |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Спасибо, что сломали мой мозг..)))
На самом деле это две разные ошибки с одним названием, как мне показалось на первый взгляд. Мой вариант связан именно с замыканием классов друг на друга, а по вашей ссылке ошибка из-за рассинхронизации времени - так мне сначала показалось. Но если это проблема рассинхронизации времени, то она должна работать для любых классов - немного изменив свой класс мне не удалось повторить эту ошибку. А перевод времени назад на сутки только добавил количество выдаваемых ошибок в исходных классах, дальше больше... перевод времени на двое суток добавил еще одну невразумительную ошибку: iNils, я Вас после этого боюсь..))
__________________
скриптограф |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|