|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Указатели и классы
Привет. Грустно это... указатели такая хорошая штука, а делфи... или это может я че не так делаю?
Короче к делу. Создаю я шахматы (зачетная работа у меня такая ). У меня есть класс Cell1 = class(TShape) - это класс клетки шахматной доски, а также есть класс Figure = class(TImage) - это базовый класс для всех шахматных фигур. Класс Figure имеет property player:boolean read GetPlayer write setPlayer;, который указывает принадлежность фигуры к игроку. Класс Cell1 имеет параметр fig : ^Figure; - указатель на фигуру, стоящую на этой клетке, если фигуры нет, то nil Вся доска - есть массив pole: array[1..8,1..8] of Cell1; (объявлен как глобальная переменная) В чем суть проблемы: в одном из методов класса Figure есть строчка if (pole[x,y].fig <> nil) and .... - тут все нормально, но стоит только сделать так: if (pole[x,y].fig <> nil) and (pole[x,y].fig.player <> nextMove) как генерируется ошибка Access voilation at address ... отладчик показывает что значение параметра pole[x,y].fig = @значение, но по поводу параметров этого самого fig говорит - innaseble value. КТО МОЖЕТ ПОМОГИ ПЛИЗ!!! |
#2
|
|||
|
|||
Тебе не нужен указатель на фигуту, т.к. любая переменная класса в Дельфи есть указатель!!!.
А если делаешь так, то разименовывай указатель принудительно там, где их используешь: Код:
if (pole[x,y].fig <> nil) and (pole[x,y].fig^.player <> nextMove) |
#3
|
|||
|
|||
эм... тогда для каких целей нужен принудительный указатель?
а это точно что все переменные - указатель? странно это... Последовал совету - все воркает! СПАСИБО |
#4
|
||||
|
||||
Не все переменные, а переменные-классы.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |