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

Вниз

наследник TObjectList   Найти похожие ветки 

 
Iriss   (2009-02-10 10:26) [0]

Есть тип TContainerPump - наследник от TObjectList

type TContainerPump = class(TObjectList)

   public constructor Create;

   public function Add    (APump: TPump): Integer;
   public function Remove (APump: TPump): Integer;
   public function IndexOf(APump: TPump): Integer;

   public function First : TPump;
   public function Last  : TPump;

   public procedure Sort(Compare: TListSortCompare);

   private function  GetItem(Index: Integer): TPump;
   private procedure SetItem(Index: Integer; APump: TPump);
   public  property Items[Index: Integer]: TPump read GetItem write SetItem; default;

end;


хочу отсортировать список
var ContainerPumps: TContainerPump;

   ContainerPumps.Sort( compareByMaxPower );


где

function TPumpsOptimal.compareByMaxPower(Pump1, Pump2: TPump) : Integer;
begin
   if ( Pump1.MaxPower > Pump2.MaxPower )
   then Result := 1
   else begin

       if Pump1.MaxPower = Pump2.MaxPower
       then Result := 0
       else Result := -1;

   end;
end;


выдает ошибку
несоответствие типов: regular procedure and method pointer

понимаю, что
TListSortCompare = function (Item1, Item2: Pointer): Integer;

у меня Item типа TPump, но не понимаю как исправить ошибку.

Подскажите, please


 
Сергей М. ©   (2009-02-10 10:31) [1]


> у меня Item типа TPump, но не понимаю как исправить ошибку


Это не имеет ни малейшего отношения к наблюдаемой тобой ошибке.


> несоответствие типов: regular procedure and method pointer


Метод Sort требует параметром адрес регулярной процедуры, а ты пытаешься скормить ему адрес метода класса.


 
Iriss   (2009-02-10 10:38) [2]

делал все вроде бы так же как здесь
http://www.delphisources.ru/pages/faq/faq_delphi_basics/TList.php.html

Просветите темного:

> адрес регулярной процедуры
что такое регулярная процедура?


 
Сергей М. ©   (2009-02-10 10:42) [3]


> Iriss   (10.02.09 10:38) [2]


> делал все вроде бы так же как здесь


Ну где же так же ?

Сравни оригинал

function compareByName(Item1 : Pointer; Item2 : Pointer) : Integer;

и своё

function TPumpsOptimal.compareByMaxPower(Pump1, Pump2: TPump) : Integer;

В чем главное отличие ?


 
Плохиш ©   (2009-02-10 10:44) [4]


> Iriss   (10.02.09 10:38) [2]
> > адрес регулярной процедуры
> что такое регулярная процедура?

Это обычная процедура, описанная в документации по языку паскаль, не являющаяся методом какого-либо класса. Пример, readln.

PS. А тебе, вообще-то, функцию надо.


 
Iriss   (2009-02-10 10:55) [5]

разобрался, спасибо большое


 
Anatoly Podgoretsky ©   (2009-02-10 11:08) [6]

> Iriss  (10.02.2009 10:38:02)  [2]

Врешь!

У тебя
function TPumpsOptimal.compareByMaxPower(Pump1, Pump2: TPump) : Integer;

а в примере
function compareByName(Item1 : Pointer; Item2 : Pointer) : Integer;



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
15-1232542679
Marser
2009-01-21 15:57
2009.03.29
Как насчёт KMP?


15-1233208661
charoey_mag
2009-01-29 08:57
2009.03.29
GSM сигнализация по температуре


2-1233786331
Drowsy
2009-02-05 01:25
2009.03.29
Библиотеки на С++ для Дельфи.


15-1230126644
@!!ex
2008-12-24 16:50
2009.03.29
Lua работа с внешними классами как со своими родными


15-1232691373
Труп Васи Доброго
2009-01-23 09:16
2009.03.29
Поиск по "иерархической" БД