Главная страница
    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.01 c
3-1145891342
linx
2006-04-24 19:09
2006.06.18
Запретить чтение ячейки данных в таблице


15-1148622507
worldmen
2006-05-26 09:48
2006.06.18
WinXp Pro. Доступ к принтерам по сети.


2-1149139066
Hadroran
2006-06-01 09:17
2006.06.18
Вызов процедуры события


2-1149056241
Тимофеич
2006-05-31 10:17
2006.06.18
размеры окна


2-1149241522
Elen
2006-06-02 13:45
2006.06.18
Исчезает новосозданный компонент





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