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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2009, 01:33   #1
goog
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 17
Вопрос access violation при создании обьекта

Всем привет.
О коде: в паскале была такой класс как Tcollection, в дельфи он тоже есть, но заметно хуже (мнение нубика) ), так или иначе я решил написать это клас сам О.о
примерно так:
Код:
Type
  PointerArray = array of Pointer;

  TMyCollection = class(TObject)
  private
    FItems: PointerArray;
    FCount: integer;
    FDelta: integer;
    FLimit: integer;
    procedure SetLimit(ALimit: integer);
    procedure SetCount(ACount: integer);
    procedure SetDelta(ADelta: integer);
  public
    property Items: PointerArray read FItems;
    property Count: integer      read FCount write SetCount;
    property Delta: integer      read FDelta write SetDelta;
    property Limit: integer      read FLimit write SetLimit;
    constructor Init(ALimit, ADelta :integer);
    destructor Done;virtual;
  end;
implementation
{TMyCollection}
  {..все процедуры-сеты..}

  constructor TMyCollection.Init(ALimit, ADelta :integer);
  begin
   inherited create;
   count:= 0;                //<-вылетает сдесь
   Delta:= ADelta;
   Limit:= Alimit;
  end;
{/TMyCollection}
end.
но при создании обьекта появляется access violation, я так понимаю, что это из-за того что обьект не создался, а обращается к памяти, но почему этого не произошло?
заранее спасибо)
goog вне форума Ответить с цитированием
Старый 11.01.2009, 01:49   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Только что проверил этот код - всё работает. Может покажешь, что записано в процедуре SetCount?
Jeni вне форума Ответить с цитированием
Старый 11.01.2009, 01:58   #3
goog
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 17
По умолчанию

тривиально:
Код:
procedure TMyCollection.SetCount(ACount: integer);
  begin
    FCount:= Acount;
end;
goog вне форума Ответить с цитированием
Старый 11.01.2009, 02:04   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Значит проблема где-то в другом месте. Если пришлешь проект, могу глянуть, т.к. у меня этот код нормально работает.

Цитата:
Сообщение от goog Посмотреть сообщение
FCount:= Acount;
Если так, то может не стоит и огород городить - напиши проще, без процедуры:
Код:
property Count: integer read FCount write FCount;
Jeni вне форума Ответить с цитированием
Старый 11.01.2009, 02:28   #5
goog
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 17
По умолчанию

вот оно Ptest.zip
goog вне форума Ответить с цитированием
Старый 11.01.2009, 02:38   #6
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Ошибка в строке: q:= q.Init(10,2); - как же можно использовать q.Init, пока переменная q не создана?

Создавать конкретный экземпляр класса (т.е. объект) нужно так:
q:= TMycollection.Init(10,2);
Jeni вне форума Ответить с цитированием
Старый 11.01.2009, 04:42   #7
DelDev
Пользователь
 
Аватар для DelDev
 
Регистрация: 09.01.2009
Сообщений: 24
По умолчанию

А чем стандартный класс не угодил, зачем велосипед изобретать?
DelDev вне форума Ответить с цитированием
Старый 11.01.2009, 14:30   #8
goog
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Jeni Посмотреть сообщение
Ошибка в строке: q:= q.Init(10,2); - как же можно использовать q.Init, пока переменная q не создана?

Создавать конкретный экземпляр класса (т.е. объект) нужно так:
q:= TMycollection.Init(10,2);
БОльшое спасибо! так и знал, что где-то ступил, но я только учусь)

Цитата:
А чем стандартный класс не угодил, зачем велосипед изобретать?
в стандартный класс можно записывать только эллементы одного типа, или я чего-то не понял)
goog вне форума Ответить с цитированием
Старый 11.01.2009, 14:40   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
в стандартный класс можно записывать только эллементы одного типа, или я чего-то не понял)
как и в любом нормальном языке - да.
но чем не угодил при этом тип Tobject ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 11.01.2009, 14:58   #10
goog
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
но чем не угодил при этом тип Tobject ?
при чем тут Tobjekt?
goog вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 16:46
Access violation at address.. RegentM Общие вопросы Delphi 4 01.11.2007 03:46
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 19:55
Возникает исключение "Access violation at address ... Наташка Общие вопросы Delphi 1 18.05.2007 12:16