|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.05.2010, 00:09 | #1 |
Регистрация: 25.05.2010
Сообщений: 3
|
qsort
Уважаемые господа программисты. Мне нужно отортировать массив данных структур:
struct Stud3 { string Name; int cost; string controlDate; ... }; по полю Name. Естественно я пытаюсь воспользоваться функцией qsort, предварательно написав функцию сравнения int compare(const Stud3 *s1, const Stud3 *s2); но! когда я в qsort в качестве последнего параметра передаю эту функцию, возникает ошибка error C2664: 'qsort': cannot convert parameter 4 from 'int(__cdecl *)(const Stud3 *, const Stud3 *)' to 'int(__cdecl *)(const void *, const void *)' Я что-то путаю, или void* может принимать значения указателей на любые объектные типы? Почему же тогда возникает такая ошибка? |
26.05.2010, 00:32 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
попробуйте сделать приведение к нужному типу, так как С всеттаки строгий язык
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
26.05.2010, 00:34 | #3 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Пепел Феникса
он пишет на плюсах. и нужно не приводить к нужному типу, а объявить функцию с требуемыми типами, ибо qsort ожидает указатель на функцию, в которую передаются константные указатели типа void
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
26.05.2010, 00:49 | #4 |
Регистрация: 25.05.2010
Сообщений: 3
|
если я объявлю функцию с указателями на void, то я не смогу внутри нее подступиться к нужному мне полю Name моей структуры через параметры... и еще вот пример функции сравнения для qsort с параметрами типа double*, которая прекрасно работает:
int compare_doubles (const double *a, const double *b) { return (int) (*a - *b); } а приведение где делать-то?? |
26.05.2010, 01:07 | #5 | ||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Jauhen
вот внутри функции compare и делай приведение к своей структуре Цитата:
Цитата:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
||
26.05.2010, 01:15 | #6 |
Регистрация: 25.05.2010
Сообщений: 3
|
Огромное спасибо, все работает
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
qsort и структуры | burzum | Общие вопросы C/C++ | 1 | 26.11.2009 13:23 |
Функция qsort() | phpcreator | Общие вопросы C/C++ | 1 | 19.10.2009 22:34 |