Как передать функции указатель на метод структуры?

Тема в разделе "LANGS.C", создана пользователем dyn, 31 окт 2009.

  1. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Ребят.Всем привет.
    Хочу вызвать процедуру qsort из метода структуры PACKETS_HANDLERS

    Вот прото

    typedef struct _PACKED_HANDLERS
    {

    DWORD num_of_elements;
    WORD packet_index;
    WORD packet_ext;
    WORD packet_attributes;
    WORD timer;
    DWORD elements[0x400];
    bool logging;


    int _cdecl cmp_elems(const void *pelem1, const void *pelem2);
    bool _cdecl prepare_packet();
    } PACKED_HANDLERS, *PPACKED_HANDLERS;


    В методе prepare_packet хочу вызвать процедуру qsort. Вызываю.
    Вот так
    qsort(&elements, num_of_elements, 4, &cmp_elements);

    Компилятор выдает ошибку, "не могу забоундить символ"

    Помогите. Как из метода вызвать процедуру qsort с указателем на процедуру сравнения, которая так же будет методом структуры.
     
  2. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    PACKED_HANDLERS - PACKET_HANDLERS т.е.
    верните редактирование
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Зачем это? Есть функторы.
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Ответ на приведённую формулировку - сделать процедуру сравнения статическим методом (иными словами, добавить ключевое слово static перед объявлением то ли cmp_elems, то ли cmp_elements).
     
  5. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    diamond
    Работает. Спасибо!
    Скажите пожалуйста, а почему, если метод НЕ статический - программа не компилируется?
     
  6. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Потому что (нестатические) функции-члены вызываются не так, как обычные функции (например, им нужен указатель this). Сишный qsort ничего не знает про C++'овские классы и соответственно может вызвать только обычные функции.