![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 21.04.2010
Сообщений: 144
|
![]()
Как задать функцию? Пишу так:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
![]()
А проблема то в чем?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
![]() |
![]() |
![]() |
#3 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
![]()
const void* же. Ведь операция сравнения ничего не должна менять, логично? Вот так выглядит объявление qsort:
Код:
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 26.02.2011 в 21:19. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 21.04.2010
Сообщений: 144
|
![]()
Прошу прощения, забыл.
1>c:\users\technodrive\documents\vi sual studio 2010\projects\курсач\курсач\bwt.h(2 1): error C3867: bwtcoder::compare: в вызове функции отсутствует список аргументов; используйте "&bwtcoder::compare" для создания указателя на член Честно говоря, не понимаю, какие параметры можно передать функции compare |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
![]()
Дейтсвительно, нужно поменять
Код:
Код:
Код:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
![]() |
![]() |
![]() |
#6 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
![]()
void qsort(void *base, size_t num, size_t size, int (*comparator)(const void *, const void *));
base Pointer to the first element of the array to be sorted. num Number of elements in the array pointed by base. size Size in bytes of each element in the array. comparator Function that compares two elements. The function shall follow this prototype: int comparator ( const void * elem1, const void * elem2 ); The function must accept two parameters that are pointers to elements, type-casted as void*. These parameters should be cast back to some data type and be compared. The return value of this function should represent whether elem1 is considered less than, equal to, or greater than elem2 by returning, respectively, a negative value, zero or a positive value. И ведь это логично, ведь компаратор не должен иметь права изменять сравниваемое!
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 26.02.2011 в 21:47. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 21.04.2010
Сообщений: 144
|
![]()
const дописал, вроде все в порядке с этой частью, но вот при добавлении & получил
1>c:\users\technodrive\documents\vi sual studio 2010\projects\курсач\курсач\bwt.h(2 1): error C2276: &: недопустимая операция с выражением привязанной функции-члена пробуем такой вариант: &bwtcoder::compare 1>c:\users\technodrive\documents\vi sual studio 2010\projects\курсач\курсач\bwt.h(2 1): error C2664: qsort: невозможно преобразовать параметр 4 из "int (__thiscall bwtcoder::* )(const void *,const void *)" в "int (__cdecl *)(const void *,const void *)" если так: &(bwtcoder::compare) 1>c:\users\technodrive\documents\vi sual studio 2010\projects\курсач\курсач\bwt.h(2 1): error C2276: &: недопустимая операция с выражением привязанной функции-члена Последний раз редактировалось Farrel; 26.02.2011 в 22:06. |
![]() |
![]() |
![]() |
#8 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
![]()
Ито за bwtcoder::? В Си пространств имён нет.
И нет, операцию взятия адреса для функции не надо проводить. Просто пиши qsort((void*)твой_массив,колво_элем ентов,sizeof(module),compare); А что за module-то? Что за тип такой? Судя по использованию strcmp, вместо module тебе надо писать char* везде.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 26.02.2011 в 22:32. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 21.04.2010
Сообщений: 144
|
![]()
пишу на плюсах, а "сишные отступления" использую т.к. удобнее
bwtcoder - имя класса, действительно забыл предупредить. Весь код приводить не стал, т.к. когда код большой, тему никто не читает ![]() и просто с compare летит ошибка которую я уже писал в своём втором посте |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 21.04.2010
Сообщений: 144
|
![]()
В конце концов разобрался. Всего то и надо было, чтобы compare была отдельной функцией а не членом класса, как было у меня.
Всем кто пытался помочь, спасибо. Вот как всегда, хотел как лучше, чтоб в посте поменьше лишнего кода было, а получилось что сть проблемы не показал ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задание на процедуры и функции | neomax38 | Помощь студентам | 4 | 07.01.2011 23:16 |
Задание функции (Pascal) | k0tone | Помощь студентам | 2 | 15.11.2010 16:29 |
qsort | Jauhen | Общие вопросы C/C++ | 5 | 26.05.2010 01:15 |
qsort и структуры | burzum | Общие вопросы C/C++ | 1 | 26.11.2009 13:23 |