Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: метод Sort класса TList  (Прочитано 9204 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Iskander
Гость
« : 26-09-2007 09:03 » new

немогу разобраться как его использовать А черт его знает...
в h-файле формы объявляю функцию сравнения
Код:
private:	// User declarations
    int __fastcall CompareFunc(void * Item1, void * Item2);

в срр-файле реализация
Код:
int  __fastcall TForm1::CompareFunc (void *Item1, void *Item2)
{
if (   ( ((TPart *)Item1)->GetDate())   <
(((TPart *)Item2)->GetDate()))
return 1;
else if ( ( ((TPart *)Item1)->GetDate())   >
(((TPart *)Item2)->GetDate()) ) return -1;
else return 0;
}

потом в обработчике кнопки вызываю функцию в цикле
Код:
for (int i =ChanelA->Count-1; i<1; i--)
   {

ChanelA->Sort(&CompareFunc(ChanelA->Items[i], ChanelA->Items[i-1]));

   }
при компиляции выдает ошибку:
[C++ Error] Unit1.cpp(75): E2027 Must take address of a memory location

пробовал создавать ссылку на функцию непомогает  Я зол! Я зол! Я зол! сыпит ошибки компиляции:
[C++ Error] Unit1.cpp(74): E2235 Member function must be called or its address taken
[C++ Error] Unit1.cpp(75): E2034 Cannot convert 'int' to 'int (_fastcall *)(void *,void *)'
[C++ Error] Unit1.cpp(75): E2342 Type mismatch in parameter 'Compare' (wanted 'int (_fastcall *)(void *,void *)', got 'int')

немогу врубиться в чем трабла  Не понял
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 26-09-2007 09:11 » 

Iskander,

1) у тебя объявлено
CompareFunc (void *Item1, void *Item2)

а передаешь не указатели, а элементы массива Items (не знаю, какой там у тебя тип)
CompareFunc(ChanelA->Items[ i], ChanelA->Items[ i-1]

2) вот это вообще синтаксическая ошибка
ChanelA->Sort(&CompareFunc(...))

что должно передаваться в sort  ?
« Последнее редактирование: 26-09-2007 09:13 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 26-09-2007 15:16 » 

Iskander, нельзя передать указатель на нестатический метод класса. Объяви метод статическим членом!

По моему, удобнее использовать STL, чем классы VCL/CLX.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines