Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проблема с TList


Автор: Fox_in 22.5.2007, 12:25
Создаю класс с полем типа TList. Заполняю его объектами, которые также имеют поле TList. В результате при попытке обратиться к "вложенному" полю появляется ошибка. Как можно исправить??

Автор: skyboy 22.5.2007, 21:28
ругань на абстрактный метод, да? smile
TList - это не "конечный" класс: там немало абстрактных методов. Надо использовать наследников(благо, в составе модуля Contnrs их достаточно: TObjectList, TInterfacesList, всякие там TQueue и т.д.) этого класса.

нужен код smile
написанное выше - бред. оставлено в назидание остальным.

Автор: Alexeis 22.5.2007, 21:42
Цитата(skyboy @  22.5.2007,  21:28 Найти цитируемый пост)
TList - это не "конечный" класс: там немало абстрактных методов.

Который?

Код

  TList = class(TObject)
  private
    FList: PPointerList;
    FCount: Integer;
    FCapacity: Integer;
  protected
    function Get(Index: Integer): Pointer;
    procedure Grow; virtual;
    procedure Put(Index: Integer; Item: Pointer);
    procedure Notify(Ptr: Pointer; Action: TListNotification); virtual;
    procedure SetCapacity(NewCapacity: Integer);
    procedure SetCount(NewCount: Integer);
  public
    destructor Destroy; override;
    function Add(Item: Pointer): Integer;
    procedure Clear; virtual;
    procedure Delete(Index: Integer);
    class procedure Error(const Msg: string; Data: Integer); overload; virtual;
    class procedure Error(Msg: PResStringRec; Data: Integer); overload;
    procedure Exchange(Index1, Index2: Integer);
    function Expand: TList;
    function Extract(Item: Pointer): Pointer;
    function First: Pointer;
    function GetEnumerator: TListEnumerator;
    function IndexOf(Item: Pointer): Integer;
    procedure Insert(Index: Integer; Item: Pointer);
    function Last: Pointer;
    procedure Move(CurIndex, NewIndex: Integer);
    function Remove(Item: Pointer): Integer;
    procedure Pack;
    procedure Sort(Compare: TListSortCompare);
    procedure Assign(ListA: TList; AOperator: TListAssignOp = laCopy; ListB: TList = nil);
    property Capacity: Integer read FCapacity write SetCapacity;
    property Count: Integer read FCount write SetCount;
    property Items[Index: Integer]: Pointer read Get write Put; default;
    property List: PPointerList read FList;
  end;


Добавлено через 4 минуты и 59 секунд
Цитата(Fox_in @  22.5.2007,  12:25 Найти цитируемый пост)
В результате при попытке обратиться к "вложенному" полю появляется ошибка. Как можно исправить?? 

   Какая ошибка? У меня все скомпилилось и запустилось. Отлично работает.

Автор: skyboy 22.5.2007, 22:51
Цитата(Alexeis @  22.5.2007,  20:42 Найти цитируемый пост)
Который?

аааааа... посыпаю голову пеплом. перепутать TList с TStrings  - это нечто :( 
прошу прощения.

Автор: aktuba 22.5.2007, 23:03
skyboy, а пепел качественный?  smile Извените за флуд...

Автор: Alexeis 23.5.2007, 09:21
Цитата(skyboy @  22.5.2007,  22:51 Найти цитируемый пост)
аааааа... посыпаю голову пеплом. перепутать TList с TStrings  - это нечто :( 
прошу прощения. 

  Перепутать совсем не сложно, зная про существование класса-гибрида TStringList и того что одна часть его названия абстрактна smile 

Автор: Fox_in 23.5.2007, 10:43
Так, проблему исправил -- пределывал раза три, наконец все получилось. Забыл про TList.Create перед обращением к списку.

Автор: Fox_in 23.5.2007, 22:40
В продолжение темы...

Есть переменная типа TList. Я добавляю элементы в список. Затем содержимое списка нужно передать другой переменной, а эта будет использоваться снова. Как это реализовать?? (корректный обмен, то есть)

Автор: aktuba 23.5.2007, 22:42
Assign

Автор: Fox_in 23.5.2007, 23:08
Ээээ... А поподробнее можно?? (желательно с куском кода)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)