Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.011 c
2-1149154398
.ruslan
2006-06-01 13:33
2006.06.18
MonthCalendar1


11-1128575351
DmiSb
2005-10-06 09:09
2006.06.18
Можно ли при отправке почты при помощи Synapse прикрепить файл ?


2-1148765656
IAH
2006-05-28 01:34
2006.06.18
Как динамически менять имя метода/свойста?


2-1149211621
VitalikS
2006-06-02 05:27
2006.06.18
Формат строки


15-1147467855
Yanis
2006-05-13 01:04
2006.06.18
Где скачать Delphi 2 и Delphi 1?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский