Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Класс с TList   Найти похожие ветки 

 
Elast   (2004-11-29 21:04) [0]

Ошибка при записи в TList

 TMyItem = class                        
   fId   : integer;
   fName : string;
   constructor Create( aId : integer; aName : string);
 end;

 TMyList = class
   private
     FMyList : TList;
     function  GetItem(Index: Integer): TMyItem;
     procedure SetItem (Index: Integer; Item: TMyItem);
   public
     property  Items[Index:integer] : TMyItem read GetItem write SetItem;
     constructor Create;
     destructor Destroy; override;
 end;

 PTMyItem = ^TMyItem;

....

constructor TMyItem.Create( aId : integer; aName : string);
begin
 inherited Create;
 fId   := aId;
 fName := aName;
end;

constructor TMyList.Create;
begin
 inherited Create;
end;

function TMyList.GetItem(Index: Integer): TMyItem;
begin
 Result := PTMyItem(FMyList.Items[index])^;
end;

procedure TMyList.SetItem(Index: Integer; Item: TMyItem);
begin
 PTMyItem(FMyList.Items[index])^ := Item;
end;

.......
 MyList := TMyList.Create;
 MyItem := TMyItem.Create(1, "aaa");
 MyList.FMyList.Create;                !!!!!!!????

 MyList.Items[1] := MyItem;

Просьба проконсультировать.


 
begin...end ©   (2004-11-29 21:08) [1]

> Elast   (29.11.04 21:04)

> MyList.FMyList.Create;                !!!!!!!????

Вы MyList и MyItem создавали НЕ ТАК. Почему же Вы FMyList создаёте ТАК?


 
Elast   (2004-11-29 21:20) [2]

Нужно ли FMyList создавать для записи в Items?


 
begin...end ©   (2004-11-29 21:26) [3]

> [2] Elast   (29.11.04 21:20)

> Нужно ли FMyList создавать для записи в Items?

Конечно, нужно. При записи в свойство Items вызывается метод SetItem, в котором используется FMyList. Как же его не создавать? Вопрос в другом - КАК создавать: FMyList := TList.Create. И делать это лучше в конструкторе класса TMyList. А уничтожать - в деструкторе.


 
Elast   (2004-11-29 21:37) [4]

Конструктор модернизировал. Спасибо. Почему для записи в items[1]
ошибка List index out of bounds


 
begin...end ©   (2004-11-29 21:48) [5]

> [4] Elast   (29.11.04 21:37)

> Почему для записи в items[1]
> ошибка List index out of bounds

А почему бы и нет? FMyList теперь создан, но в нём нет никаких Item"ов. Потому, что их туда никто не добавил. А Вы пытаетесь один из таких несуществующих элементов прочитать.

Вы хотите создать свой класс списка? Тогда, может быть, вместо FMyList: TList лучше использовать что-то вроде FMyList: array of TMyItem?
Посмотрите на реализацию того же TList. Или Вы хотите что-то другое сделать, - тогда что?


 
begin...end ©   (2004-11-29 21:50) [6]

К [5]:

> пытаетесь один из таких несуществующих элементов прочитать

Пардон, не прочитать, а записать туда что-то.


 
Zelius ©   (2004-11-30 01:29) [7]

ИМХО, TCollection и TCollectionItem больше подходят для таких целей...


 
jack128 ©   (2004-11-30 02:31) [8]

Zelius ©   (30.11.04 1:29) [7]
А, простите, какие цели у автора??


 
GrayFace ©   (2004-11-30 05:21) [9]

Elast   (29.11.04 21:37) [4]
Add используй.


 
Defunct ©   (2004-11-30 07:44) [10]

Elast   (29.11.04 21:04)
Зачем мутить нечно внутри которого TList, когда можно этоже нечто намутить наследуя TList?

TMyList = class(TList)
private
  ..
public
  ..
end;

перекройте требуемые методы и задача ваша решена.


 
WondeRu ©   (2004-11-30 08:21) [11]

дополнение:

PTMyItem = ^TMyItem;
мура, эту строчку вообще убрать, а остальное исправить так:

....

function TMyList.GetItem(Index: Integer): TMyItem;
begin
Result := TMyItem(FMyList.Items[index]);
end;

procedure TMyList.SetItem(Index: Integer; Item: TMyItem);
begin
FMyList.Items[index]) := Item;
end;


и последуй совету Defunct ©   (30.11.04 7:44) [10]


 
icWasya ©   (2004-11-30 10:46) [12]

и ещё -
желательно к TMyList добавить метод ADD и свойство Count с возможностью чтения/записи


 
Думкин ©   (2004-11-30 10:48) [13]

> [12] icWasya ©   (30.11.04 10:46)

А записи то зачем?



Страницы: 1 вся ветка

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
3-1100428858
denis24
2004-11-14 13:40
2004.12.12
TcustomAdodateset.filter


4-1099167279
MaxDDinc
2004-10-31 00:14
2004.12.12
Изменить системное время


14-1101045870
Piter
2004-11-21 17:04
2004.12.12
Зачем делать Set8087CW после вызова WinApi функций?


3-1100200640
GL00m
2004-11-11 22:17
2004.12.12
что делать с файлами _qsq*.db


14-1100984088
DeMoN-777
2004-11-20 23:54
2004.12.12
У кого дома более 1-ого работающего ПК