Функция Sort в TList

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Функция Sort в TList

Сообщение dvpt » 21.03.2009 13:38:16

Не работает Функция Sort в TList

function TMyList.compare(Item1,Item2:Pointer):Integer;
begin
...
if(...)then Result:=-1
else if(...)then Result:=1
else Result:=0
end;
constructor TMyList.create();
begin
List:=TList.create;
end;
...
procedure TMyList.sort();
begin
List.sort(@compare)
end;

но при компиляции возвращается ошибка:
Error: Incompatible type for arg no. 1: Got "<procedure variable type
of function(Pointer, Pointer):LongInt of object;Register>",
expected "<procedure variable type of function(Pointer,
Pointer):LongInt;Register>"

В Delphi функция работает безупречно.
Нигде найти ответа не смог.
Может кто знает в чем причина?
dvpt
новенький
 
Сообщения: 38
Зарегистрирован: 18.03.2009 11:46:04

Re: Функция Sort в TList

Сообщение Logo » 21.03.2009 14:24:33

Помойму функция должна быть вне класса, тоесть:
function compare(Item1,Item2:Pointer):Integer;

Конкретно с этой не работал, но такие встречались.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Функция Sort в TList

Сообщение dvpt » 21.03.2009 15:08:37

Да, делал и вне класса. Результат тот же :-(
dvpt
новенький
 
Сообщения: 38
Зарегистрирован: 18.03.2009 11:46:04

Re: Функция Sort в TList

Сообщение Logo » 21.03.2009 15:39:40

Хм. У меня fpc 2.2.3 вот это компилирует без проблем:
Код: Выделить всё
function Ccompare(Item1,Item2:Pointer):Integer;
begin
//...
//if(...)then Result:=-1
//else if(...)then Result:=1
//else
Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  List:= TList.create;
  List.Sort(@Ccompare);
end;

В классе выдает ошибку.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Функция Sort в TList

Сообщение dvpt » 21.03.2009 15:53:10

Функция Compare была вложена в процедуру.
Вынес из процедуры и все заработало.
А Delphi и так работало.
Спасибо :-) Вопрос решен.
dvpt
новенький
 
Сообщения: 38
Зарегистрирован: 18.03.2009 11:46:04


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru