[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: MAК$  
Случай с классами...
IlshatДата: Среда, 24 Сентября 2008, 20:28 | Сообщение # 1
Бывалый
Группа: Участники
Сообщений: 53
Награды: 0
Замечания: 0%
Статус:

Профессия: Прогер(Basic, C++); дизайн(PS)
Я тут вот нарвался на интересный случай (у кого-то наверно бывало): вот код

SuperStrict
Graphics(600, 440)

Global obj:TMyType=New TMyType 'здесь начинается бесконечный цикл

While KeyHit(27)=False
Cls()

'код...

Flip()
End While
End

Type TMyType
Field link:TMyType
Field param0:Int
Field param1:Int

Method New()
link=New TMyType
End Method

Method Update()
'код...
End Method

Method Render()
'код...
End Method
End Type


При запуске прога зависает - то ли компилер пытается всем объектам выделить память, то ли (скорее всего) хочет найти самый начальный элемент, которому нужно первым выделить память. И то и другое невозможно. Получается бескон. цикл... cool
Ваши комментарии: wink




Сообщение отредактировал Ilshat - Пятница, 26 Сентября 2008, 16:12
 
IlshatДата: Четверг, 25 Сентября 2008, 22:00 | Сообщение # 2
Бывалый
Группа: Участники
Сообщений: 53
Награды: 0
Замечания: 0%
Статус:

Профессия: Прогер(Basic, C++); дизайн(PS)
Quote (snikers)
mt.link = mt

Как я понял здесь mt указывает на самого себя через link. snikers, в чем же здесь решение? bash
Я с link хотел связать несколько объектов, т.е. link - "указатель" на следующий объект в цепочке. (но щас нашел другой способ... biggrin )


 
IlshatДата: Пятница, 26 Сентября 2008, 16:09 | Сообщение # 3
Бывалый
Группа: Участники
Сообщений: 53
Награды: 0
Замечания: 0%
Статус:

Профессия: Прогер(Basic, C++); дизайн(PS)
(мне это нужно было чтоб Тетрис сделать)
link я убрал, просто создал новый класс (TGroup). Объекты TGroup содержат в себе несколько объектов-TBlock, которыми и управляют (перемещение, рендер и т.д.).
Code


SuperStrict
Graphics(640, 480)

TGroup.Create()

While KeyHit(27)=False
   Cls()
     
   TGroup.UpdateAll()
     
   TGroup.RenderAll()
     
   Flip()
End While
End

Type TBlock 'TMyType в том примере
   Field x%, y%
     
   Method Update()
   End Method
     
   Method Render()
   End Method
End Type

Type TGroup
   Global list:TList
   Global count_name%
     
   Field name%
   Field blocks:TBlock[4]
     
   Function Create()
    If list=Null list=CreateList()
    Local g:TGroup=New TGroup
    list.AddLast(g)
      
    count_name:+1
    g.name=count_name

    For Local i%=0 To 3 g.blocks[i]=New TBlock Next
   End Function
     
   Method Update()
    For Local i%=0 To 3 blocks[i].Update() Next
   End Method
     
   Method Render()
    For Local j%=0 To 3
     blocks[j].Render()
    Next
   End Method
     
   Function UpdateAll()
    For Local g:TGroup=EachIn(list) g.Update() Next
   End Function
     
   Function RenderAll()
    For Local g:TGroup=EachIn(list) g.Render() Next
   End Function
End Type




Сообщение отредактировал Ilshat - Пятница, 26 Сентября 2008, 16:11
 
diablo190Дата: Понедельник, 29 Июня 2009, 05:24 | Сообщение # 4
Начинающий
Группа: Пользователи
Сообщений: 3
Награды: 0
Замечания: 0%
Статус:
Ндяяя....
Так все правильно. Он и будет бесконечным.
Ты рекурсивно вызываешь метод New() каждому навому обьекту класса. Учи лог-часть.
 
  • Страница 1 из 1
  • 1
Поиск: