Форум программистов, компьютерный форум CyberForum.ru

Разыменование, QSort, const void в Type* - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
09.02.2010, 21:24     Разыменование, QSort, const void в Type* #1
в общем виде
C++
1
2
3
4
5
6
7
8
9
10
class type;
 
 
////////////////////
type **a;
qsort(a,n,4,sort);
//////////////////////
int sort(const void *a; const void *b){
type *x=*(type *) a; //ошибка
}
вопросс как правильно привести указатель

Добавлено через 21 минуту
вопрос снимается - разыменовал
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
09.02.2010, 22:59     Разыменование, QSort, const void в Type* #2
C
1
const type *x = (const type*) a;
Теоретически модификатор const не нужен, но для контроля от собственных ошибок можно его и написать
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.02.2010, 23:40     Разыменование, QSort, const void в Type* #3
Evg, у него просто указатель лишний раз разыменовывается, а так всё равно константный указатель на void к неконстантному на type приводится. Второй вариант:
C
1
type x = *(type*)a;
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
09.02.2010, 23:45     Разыменование, QSort, const void в Type* #4
Ога... название темы я что-то невнимательно прочитал
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
09.02.2010, 23:59  [ТС]     Разыменование, QSort, const void в Type* #5
нет,всё не так, правильный вариант
C++
1
2
polyQue *ptmp1=*((polyQue**)a);
polyQue *ptmp2=*((polyQue**)b);
фактически я просто не так преобразую объекты, мине для работы нужен был указатель на объект а я сортирую указатели на указатель на объект, а QSort добавляет к этим указателям ещё один указатель; в итоге я привожу const void * к polyQue * в первом случае, и по этому не могу разыменовывать указатель, что в последствии вызывает ошибку при исполнении, по этому тип нужно было привести к ** а потом * снять и в результате с обоих сторон оказывается polyQue*!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.02.2010, 00:23     Разыменование, QSort, const void в Type* #6
breate, добавить где-то в начале
C
1
2
typedef polyQue* type;
...
и будет точно, как у меня... Это уже вариации на тему. Естественно, если сортируется массив указателей, то и передаются указатели на указатели...
Yandex
Объявления
10.02.2010, 00:23     Разыменование, QSort, const void в Type*
Ответ Создать тему
Опции темы

Текущее время: 09:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru