Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизPointer as Class - в чем проблема Найти похожие ветки
← →
shart © (2006-05-31 01:59) [0]У меня есть TList с указателями на класс TMyObj
TMyObj= class
private
...
public
Z:Integer;
...
end;
Ещё функция сравнения:function Compare(Item1, Item2: Pointer): Integer;
begin
Result:=(Item1 as TMyObj).Y-(Item2 as TMyObj).Y; // Здесь ошибка
end;
Потом делаю Sort(@Compare); и возникает ошибка "Operator not applicable to this operand type"
Где у меня ошибка?
P.S. Написал же как и в хелпе:function CompareNames(Item1, Item2: Pointer): Integer;
begin
Result := CompareText((Item1 as TComponent).Name, (Item2 as TComponent).Name);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
List1.Sort(@CompareText);
end;
← →
Rial © (2006-05-31 02:34) [1]function Compare(Item1, Item2: Pointer): Integer;
begin
Result:=TMyObj(Item1).Y-TMyObj(Item2).Y;
end;
Это если, конечно, TMyObj - класс, или другая структура того же размера.
← →
shart © (2006-05-31 02:41) [2]Спасибо...
"Operator not applicable to this operand type" уже нет, зато есть Memory Access Violation :(
← →
atruhin © (2006-05-31 05:36) [3]Приведи код создания элементов TList. Похоже что в него попадают не действительные указатели.
← →
Shart © (2006-05-31 16:04) [4]
var
Objs:array[0..50] of TMyObj;
...
...
for i:=0 to 50 do
begin
Objs[i]:=TMyObj.Create;
ObjsList.Add(Objs[i]);
end;
← →
Ega23 © (2006-05-31 16:06) [5]
> var
> Objs:array[0..50] of TMyObj;
> ...
> ...
> for i:=0 to 50 do
> begin
> Objs[i]:=TMyObj.Create;
> ObjsList.Add(Objs[i]);
> end;
>
А зачем так через задницу?
var
obj:TMyObj;
i:Integer;
begin
for i:=0 to 50 do
begin
obj:=TMyObj.Create;
ObjList.Add(obj);
end;
end;
← →
Shart © (2006-05-31 16:09) [6]Мне просто надо иметь и массив объектов ;)
← →
AlexWlad © (2006-05-31 20:13) [7]У тебя массив Objs объявлен как локальный в процедуре? Тогда по выходе из процедуры он будет убит.
← →
Ega23 © (2006-06-01 09:32) [8]
> Мне просто надо иметь и массив объектов ;)
Тогда вообще заведи TObjectList и добавляй в него так:var
i:Integer;
begin
for i:=0 to 50 do ObjList.add(TMyObj.Create)
end;
← →
Shart © (2006-06-01 17:03) [9]Странно, когда я не использую массив, а добавляю в TList как в [5], то всё работает :) Наверное так и оставлю, правда трудно обращатся к массиву объектов
TMyObj(ObjList.Items[Index])
, но хоть как-то ;)
СПАСИБО!
← →
Ega23 © (2006-06-01 17:09) [10]
> правда трудно обращатся к массиву объектов TMyObj(ObjList.
> Items[Index]), но хоть как-то ;)
var
myObj:TMyObj;
begin
myObj:=TMyObj(ObjList.Items[Index]);
myObj. ..... ;
end;
:о)
← →
Shart © (2006-06-01 17:51) [11]можно и так:
function Objects(Index : Integer) : TMyObj;
begin
Result:=TMyObj(ObjList.Items[Index]);
end;
;)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c