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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2012, 19:48   #11
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А Last в Дельфе нигде не зарезервировано? (Нет под рукой среды, иначе б сам проверил)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.12.2012, 19:54   #12
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Я и PLast писал, и другое, он проэкт компилирует, а потом фатал выдает, что-то связанное с выделением памяти(мне так кажется). И выделяет New(Last);
Не забываем про весы.

Последний раз редактировалось KooKish; 18.12.2012 в 19:57.
KooKish вне форума Ответить с цитированием
Старый 18.12.2012, 21:07   #13
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А так?

Код:
var p: TMyList;
...
New(p^.Last);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.12.2012, 21:18   #14
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Так тоже ошибку выдает (( я вообще в печали, я уже все перепробывал. В классе не работает, а вне класса работает но зацикливается
Не забываем про весы.
KooKish вне форума Ответить с цитированием
Старый 19.12.2012, 09:09   #15
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

И кто вас учил так создавать объекты?)

читаем, просвещаемся:
http://asvoc.net/blog/2011/03/14/oop...assa-v-delphi/

New используется для выделения памяти под переменную, но никак не под объект.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 19.12.2012, 09:32   #16
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Хм... Благодарю, работать стало, но по прежнему на AddItem зацикливается. Буду дальше искать проблему...
Код:
MyList := TMyList.Create;
  New(MyList.Last);
  MyList.Last^.Index := 1;
  MyList.Last^.Previous := nil;
  MyList.Last^.Next := nil;
Вообщем вот что вышло, но я вернулся к тому с чего начинал по сути...
Можно ли как-нибудь создать память напрямую для Last ? Я правда не знаю поможет ли это ...
Не забываем про весы.

Последний раз редактировалось KooKish; 19.12.2012 в 09:43.
KooKish вне форума Ответить с цитированием
Старый 19.12.2012, 10:18   #17
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Вообщем всем огромное спасибо, разобрался !!! Особую благодарность выделяю DiemonStar'y, Тем кому интересно:
Код:
TMyList = class
    Previous: TMyList;
    Next: TMyList;
    Value: integer;
    Index: integer;
....
procedure TMyList.Init;
begin
  NewList := TMyList.Create;
  NewList.Index := 1;
  NewList.Previous := nil;
  NewList.Next := nil;
end;
Вообщем сделал через 1 класс... Как и задумывалось мной ранее, просто память не правильно выделял !!! Всем еще раз огромное спасибо!!!! Не останусь равнодушным, буду тоже помогать новичкам.
ТЕМА ЗАКРЫТА
Не забываем про весы.
KooKish вне форума Ответить с цитированием
Старый 19.12.2012, 10:49   #18
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Я смотрю вы так и не разобрались между указателями на переменную и самой переменной)

вариант добавления элемента:
Код:
procedure TListElem.AppendItem (Value : Integer);
  var Tmp : TElem;   
begin
   Tmp := TElem.Create;
   Tmp.Value := Value;
   Tmp.Prev := nil;
   Tmp.Last := nil;
   If Last <> nil Then
     begin
       Tmp.Index := Last^.Index + 1
       Tmp.Prev := Last; 
     end
   Else
     Tmp.Index := 0;
   Last^.Next := ^Tmp;
   Last := ^Tmp;
end;
пример процедуры по добавлению в конец списка.

А это она же, но с использованием указателя на класс:
Код:
procedure TListElem.AppendItem (Value : Integer);
  var Tmp : PElem;   
begin
   Tmp^ := TElem.Create;
   Tmp^.Value := Value;
   Tmp^.Prev := nil;
   Tmp^.Last := nil;
   If Last <> nil Then
     begin
       Tmp^.Index := Last^.Index + 1
       Tmp^.Prev := Last; 
     end
   Else
     Tmp^.Index := 0;
   Last^.Next := Tmp;
   Last := Tmp;
end;
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 19.12.2012 в 10:52.
DiemonStar вне форума Ответить с цитированием
Старый 19.12.2012, 11:27   #19
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Хмм.. хорошо, разберусь Еще раз спасибо !
Не забываем про весы.
KooKish вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# класс -> Ссылка на объект не указывает на экземпляр объекта. MyXa C# (си шарп) 2 17.06.2012 07:28
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Свой класс - ошибка линковки LNK2019: ссылка на неразрешенный внешний символ... Egyptorium Общие вопросы C/C++ 7 11.01.2012 17:48
ссылка на класс adwaer Общие вопросы .NET 3 01.04.2010 23:50