Функция Sort в TList

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

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

Ответить
dvpt
новенький
Сообщения: 38
Зарегистрирован: 18.03.2009 10:46:04

Функция Sort в TList

Сообщение dvpt »

Не работает Функция 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 функция работает безупречно.
Нигде найти ответа не смог.
Может кто знает в чем причина?
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

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

Конкретно с этой не работал, но такие встречались.
dvpt
новенький
Сообщения: 38
Зарегистрирован: 18.03.2009 10:46:04

Сообщение dvpt »

Да, делал и вне класса. Результат тот же :-(
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

Хм. У меня 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;

В классе выдает ошибку.
dvpt
новенький
Сообщения: 38
Зарегистрирован: 18.03.2009 10:46:04

Сообщение dvpt »

Функция Compare была вложена в процедуру.
Вынес из процедуры и все заработало.
А Delphi и так работало.
Спасибо :-) Вопрос решен.
Ответить