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

Приведение типов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
11.11.2011, 22:18     Приведение типов #1
Делаю программу, которая кроме всего прочего должна отсортировать массив. Использую для этого qsort.

Вот что получилось:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    struct Storage
    {
        int count;      // Кол-во занятых строк
        int allocated;  // Кол-во строк, для которых выделена память
        char** pchar;   // Массив указателей на строки
    };
 
 
void main() {
    Storage* myStorage; 
    //пропущено
    qsort(myStorage->pchar,size,sizeof(int),CompareIA)
    //пропущено
}
 
int CompareIA(const void *firstParametr, const void *secondParametr) {
  return (atoi(*(char **)secondParametr) - atoi(*(char **)firstParametr));
 
}
Препод отругал за то, что у меня используется привидение типов в стиле си,
Я пытаюсь привести тип вот так, но ничего не выходит
C++
1
  return (atoi(*(reinterpret_cast<const char*>(secondParametr))) - atoi(*(reinterpret_cast<const char*>(secondParametr))));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 22:18     Приведение типов
Посмотрите здесь:

Приведение типов C++
C++ Приведение типов?
Приведение типов C++
Приведение типов C++
Приведение типов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.11.2011, 09:32     Приведение типов #2
Цитата Сообщение от Dmitry99
C++
1
2
3
4
int CompareIA(const void *firstParametr, const void *secondParametr) {
  return (atoi(*(char **)secondParametr) - atoi(*(char **)firstParametr));
 
}
если у тебя этот код работает

C++
1
2
3
4
5
int CompareIA(const void *firstParametr, const void *secondParametr)
{
    return atoi(*reinterpret_cast<const char **>(secondParametr)) -
           atoi(*reinterpret_cast<const char **>(firstParametr));
}
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
13.11.2011, 09:45  [ТС]     Приведение типов #3
Цитата Сообщение от accept Посмотреть сообщение
если у тебя этот код работает

C++
1
2
3
4
5
int CompareIA(const void *firstParametr, const void *secondParametr)
{
    return atoi(*reinterpret_cast<const char **>(secondParametr)) -
           atoi(*reinterpret_cast<const char **>(firstParametr));
}
Компилятор пишет:
error C2440: reinterpret_cast: невозможно преобразовать "const void *" в "const char **"
IntelliSense: reinterpret_cast не удается отбросить квалификатор const или квалификаторы другого типа
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2011, 11:44     Приведение типов #4
C++
1
2
3
4
5
int CompareIA(void *firstParametr, void *secondParametr)
{
    return atoi(*reinterpret_cast<char **>(firstParametr)) -
           atoi(*reinterpret_cast<char **>(secondParametr));
}
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
13.11.2011, 12:32  [ТС]     Приведение типов #5
Цитата Сообщение от accept Посмотреть сообщение
C++
1
2
3
4
5
int CompareIA(void *firstParametr, void *secondParametr)
{
    return atoi(*reinterpret_cast<char **>(firstParametr)) -
           atoi(*reinterpret_cast<char **>(secondParametr));
}
Теперь компилятору не нравится эта функция в качестве аргумента для Qsort
error C2664: qsort: невозможно преобразовать параметр 4 из "int (__cdecl *)(void *,void *)" в "int (__cdecl *)(const void *,const void *)"
IntelliSense: аргумент типа "int (*)(void *firstParametr, void *secondParametr)" несовместим с параметром типа "int (__cdecl *)(const void *, const void *)"
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
13.11.2011, 12:35     Приведение типов #6
Цитата Сообщение от Dmitry99 Посмотреть сообщение
Препод отругал за то, что у меня используется привидение типов в стиле си
А то есть qsort это нормально?
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
13.11.2011, 12:36  [ТС]     Приведение типов #7
Цитата Сообщение от fasked Посмотреть сообщение
А то есть qsort это нормально?
А что в нем не нормального?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.11.2011, 12:38     Приведение типов #8
Цитата Сообщение от Dmitry99 Посмотреть сообщение
А что в нем не нормального?
qsort Си-шная функция

Добавлено через 35 секунд
Цитата Сообщение от Dmitry99 Посмотреть сообщение
void main()
и в С++ это считается ошибкой
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
13.11.2011, 12:41  [ТС]     Приведение типов #9
Цитата Сообщение от Jupiter Посмотреть сообщение
qsort Си-шная функция
В задании он разрешил использовать ее.
Цитата Сообщение от Jupiter Посмотреть сообщение
Добавлено через 35 секунд
и в С++ это считается ошибкой
Сыплю голову пеплом
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
13.11.2011, 12:42     Приведение типов #10
Цитата Сообщение от Dmitry99 Посмотреть сообщение
В задании он разрешил использовать ее.
Лучше используйте std::sort. Вреда меньше будет.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.11.2011, 13:13     Приведение типов #11
Цитата Сообщение от Dmitry99 Посмотреть сообщение
reinterpret_cast<char **>(firstParametr)
Делай через два каста. Сперва к void**, а потом к char**.
А зачем вобще так ты делаешь, я не понял.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2011, 23:49     Приведение типов #12
Цитата Сообщение от Dmitry99
Теперь компилятору не нравится эта функция в качестве аргумента для Qsort
C++
1
2
3
4
5
int CompareIA(const void *firstParametr, const void *secondParametr)
{
    return atoi(*reinterpret_cast<char * const* >(firstParametr)) -
           atoi(*reinterpret_cast<char * const* >(secondParametr));
}
а мы вот так
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
15.11.2011, 14:34  [ТС]     Приведение типов #13
Цитата Сообщение от accept Посмотреть сообщение
C++
1
2
3
4
5
int CompareIA(const void *firstParametr, const void *secondParametr)
{
    return atoi(*reinterpret_cast<char * const* >(firstParametr)) -
           atoi(*reinterpret_cast<char * const* >(secondParametr));
}
а мы вот так
Так работает, но преподу все равно не нравится, ему нравится вот так

C++
1
atof(*static_cast<char**>(const_cast<void*>(firstParametr)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 23:16     Приведение типов
Еще ссылки по теме:

Приведение типов C++
Приведение типов C++
Приведение типов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2011, 23:16     Приведение типов #14
правильно, смысл в том, чтобы все приведения прояснить
Yandex
Объявления
15.11.2011, 23:16     Приведение типов
Ответ Создать тему
Опции темы

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