Запрос на член .. в чем-то не структура - PullRequest
0 голосов
/ 28 декабря 2018

Я довольно новичок в программировании на c, и я не знаю, почему я получаю ошибку, упомянутую в названии.Я пытаюсь написать функцию, которая сравнивает массив возраста из структуры.Это структура:

typedef struct
{
    int index;
    float age;

} index;

Это функция, часть кода, в которой я получаю ошибку:

int comp ( const void *a, const void *b)
{
    if ((((index*) a)->age)>(((index*) b->age)))
        return 1;
    else if ((((index*)a)->age)<(((index*)b)->age))
        return -1;
    return 0;

}

Я собирался использовать функцию comp с qsort.Любые идеи, почему я получаю эту ошибку, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Как уже упоминалось в другом ответе, ваши круглые скобки отключены здесь:

(((index*) b->age))

Вы можете избежать такого типа ошибок в будущем, создав указатель правильного типа и используя его вместо большого количества приведений:

int comp ( const void *p1, const void *p2)
{
    const index *a = p1;
    const index *b = p2;

    if (a->age > b->age)
        return 1;
    else if (a->age < b->age)
        return -1;
    return 0;
}

Обратите также внимание, что здесь не требуется приведение типов, поскольку вы можете свободно конвертировать в / из void *.

0 голосов
/ 28 декабря 2018

В вашем коде

 (((index*) b->age)))

должно быть

(((index*) b)->age))
           ^^^------------------added parenthesis here

В противном случае (, как вы, возможно, уже знаете ) из-за приоритета оператора , приведение здесь будет неэффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...