Куда вы включаете <stdlib.h>
- потому что именно там объявлено malloc()
?
Это проблема компиляции (malloc()
undeclared) или проблема компоновки (malloc()
undefined)?
Что именно такое сообщение об ошибке?
Теперь код доступен для чтения:
<cstdlib>
- это заголовок C ++ (как и <cstdio>
).
- Вам необходимо включить
<stdlib.h>
в C.
- Вам нужно включить
<stdlib.h>
, где используется функция malloc()
- в linkedlist.c
.
У вас также есть охранники в неправильном месте в linkedlist.h
. Каноническая структура заголовочного файла:
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...the other material in the header...
...definitions and declarations...
#endif /* HEADER_H_INCLUDED */
#endif
- последняя некомментированная, непустая строка в файле, а не третья.
Ваши структуры данных чрезвычайно сложны даже для двусвязного списка. Вы уверены, что вам понадобится длина так часто, что это гарантирует сохранение указателя на голову в каждом узле списка? Я был бы удивлен, если вы используете это так часто. Я предполагаю, что у вас есть указатель на голову в каждом узле, так что, когда вы удаляете произвольный узел из списка, вы можете уменьшить длину списка. Возможно, вам лучше передать указатель на список и указатель на удаляемый узел, чем то, что у вас есть.
Я не вижу оправдания для length = 5
в функции new_list()
.
Кроме того, C и C ++ радикально отличаются по значению:
struct linked_list * new_list();
В C ++ это означает, что «new_list()
- это функция, которая не принимает аргументов и возвращает указатель struct linked_list
».
В C это означает, что «new_list()
- это функция с полностью неопределенным списком аргументов, которая возвращает указатель struct linked_list
». Функция объявлена, но прототипа для этой функции нет.
В C вы должны написать:
struct linked_list * new_list(void);
Лично я предпочитаю видеть extern
перед объявлениями функций в заголовках; на самом деле это не нужно для функций, но поскольку (extern
) необходимо (или должно быть) необходимо для переменных, объявленных в заголовках, я предпочитаю симметрию для функций, объявленных в заголовках.