Главная страница
    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
15-1148165161
ArtemESC
2006-05-21 02:46
2006.06.18
Число со степенью двойки.


15-1148044646
dimodim-furyz
2006-05-19 17:17
2006.06.18
Java 2 J2me у кого есть есть инфа?


4-1142933233
StudentVNN
2006-03-21 12:27
2006.06.18
Неработает завершение сеанса ExitWindowsEx(EWX_LOGOFF, 0)


2-1149084200
Тимофеич
2006-05-31 18:03
2006.06.18
форма


15-1148280670
deltav1
2006-05-22 10:51
2006.06.18
GPSS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский