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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
#1

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

11.11.2011, 22:18. Просмотров 1235. Ответов 13
Метки нет (Все метки)

Делаю программу, которая кроме всего прочего должна отсортировать массив. Использую для этого 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++
В чем различие привидения типа (type)expression, от type(expression)?

Приведение типов - C++
В паскале можно привести типы: type ts = 0..9; chislo = array of ts; Как это сделать на С++?

Приведение типов - C++
При вводе с клавиатуры s = 11 и a = 1.1, получаем 9. Результат переменной d = 10, это правильно. В чём подвох? int main() { ...

Приведение типов. - C++
Столкнулся с задачей считывания данных из символьного массива с дальнейшим отбором из всего этого чисел и перезаписи их в массив типа...

Приведение типов - C++
Доброго времени суток. Пусть имеются две структуры struct Student { string FirstName; string LastName; int year;

Приведение типов - C++
Как компилятор заставить адекватней приводить типы? (VS2012) Например: int a=-1; unsigned int b=5; if(a&gt;b){...}//Условие...

Приведение типов - C++
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; int c; }; class Parent2

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 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
4821 / 3241 / 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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Каратель
Эксперт С++
6553 / 3973 / 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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
13.11.2011, 12:42     Приведение типов #10
Цитата Сообщение от Dmitry99 Посмотреть сообщение
В задании он разрешил использовать ее.
Лучше используйте std::sort. Вреда меньше будет.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.11.2011, 13:13     Приведение типов #11
Цитата Сообщение от Dmitry99 Посмотреть сообщение
reinterpret_cast<char **>(firstParametr)
Делай через два каста. Сперва к void**, а потом к char**.
А зачем вобще так ты делаешь, я не понял.
accept
4821 / 3241 / 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++
Есть ли какая-нибудь разница в следующих выражениях: float a = 123.4f и float a = (float)123.4

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...

Приведение типов - C++
Добрый вечер! Реализовываю явное и не явное приведение типов. Есть два класса, сепаративных, A и B. Реализацию явного преобразования...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru