- в следующий раз будет легче получить ответ, если фрагмент размещенного кода будет именно тем, что вы вводите в компилятор, и если вы включите ошибки вашего компилятора в точности так, как они появляются вместе с вашимвопрос.
Я реструктурировал ваш пример кода + добавил основную функцию, чтобы показать некоторые ошибки компилятора, чтобы показать, что я имею в виду:
Пример кода
#define NULL 0
//the declarations of the structs I am using in my header file
typedef struct passenger {
char name[30]; // the passenger's name
double passportNumber; // their passport number
int seatNumber; // their seat number on the plane
struct passenger* next; // a pointer to the next passenger in the queue after this one
} Passenger;
typedef struct boardingQueue {
Passenger* head; // points to the Passenger at the front/head of the queue
Passenger* tail; // points to the Passenger at the end/tail of the queue
} BoardingQueue;
int sortBoardingQueue(BoardingQueue *qPtr){
int size = 3; // func undefined?? calculateSize(qPtr);
Passenger *t = qPtr->head;
Passenger *a = qPtr->head->next;
Passenger **r = &(qPtr->head);
Passenger **q = &(qPtr->next);
for (int i = size-1; i <=0; i--)
{
while(t != NULL){
if (t->seatNumber>a->seatNumber)
{
**r = *a;
**q = *t;
}
t = t->next;
a = a->next;
**r = &(r->next);
**a = &(a->next);
}
}
}
int main(){
// make passengers
Passenger a = {"p1", 111.0, 1, NULL};
Passenger b = {"p2", 222.0, 2, NULL};
Passenger c = {"p2", 222.0, 3, NULL};
// make boarding queue a->c->b
a.next = &c;
c.next = &b;
BoardingQueue q = {&a, &b};
sortBoardingQueue(&q);
}
Ошибки компилятора
dp.c: в функции 'sortBoardingQueue': dp.c: 22: 27: ошибка: в BoardingQueue {aka struct boardingQueue} 'нет члена с именем' next 'Passenger **q = &(qPtr->next);
Из этого, потому что boardingQueue не имеет члена next
, только head
и tail
. (Может быть, вы хотели, чтобы это указывало на пассажира? Я не могу сказать, что вы намеревались из контекста)
dp.c:33:22: error: request for member ‘next’ in something not a structure or union
`**r = &(r->next);`
Для этого r имеет тип Passenger **
, поэтому он указывает на структуру пассажира,Если вы действительно хотите получить доступ к следующему полю этой структуры, вам придется использовать (*r)->next
dp.c:34:13: error: invalid type argument of unary ‘*’ (have
‘Passenger {aka struct passenger}’)
**a = &(a->next);
. Для этого a
- это единственный указатель. Вы можете разыменовать его только один раз.
Итак, я надеюсь, что это поможет вам в этом задании! И в следующий раз, если вы опубликуете минимальный воспроизводимый пример https://stackoverflow.com/help/minimal-reproducible-example, вы обязательно получите лучшие ответы быстрее.