Вы должны знать, когда использовать указатель, а когда нет.(Если вы работаете со связанными списками, вам обычно нужны указатели.) Вы также должны знать, когда звездочка определяет указатель и когда он разыменовывает его.
void printlocalsalphabetical(t_local *header_l)
Это определение.header_l
является указателем на t_local
.
createlistlocals(*header_l);
sort_alphabetical(*header_l);
Это вызовы функций, где *header_l
являются выражениями, которые разыменовывают указатель, давая t_local
.Обе функции хотят указатель на t_local
, поэтому удалите звездочку.
t_local l = header_l->next;
Здесь вы определяете t_local
, но header_l->next
- указатель на t_local
, и l
должентакже указатель: Измените на t_local *l
.
puts(l->name);
l=l->next;
Оператор ->
работает только в том случае, если левая часть является указателем на структуру или суньон.Использование .
исправит синтаксическую ошибку, но не исправит код.На самом деле код уже был исправлен путем изменения типа l
на t_local *
.
(я только посмотрел здесь первую функцию, но я надеюсь, что вы поняли идею.)
Так что не надо волноваться.Сохраняйте спокойствие, прочитайте сообщения об ошибках, определите, хотите ли вы указатель или нет, затем исправьте код.Сообщения об ошибках помогут вам, а не раздражают.