У меня странная проблема в C, связанная с включением заголовочных файлов.
main.c
#include <stdio.h>
#include <stdlib.h>
#include "location.h"
int waste_new_line();
int main()
{
location *crossroads = malloc(sizeof(*crossroads));
...
location.h
typedef struct Location_Struct location;
location.c
typedef struct Location_Struct {
int ID;
char *name;
char *description;
} location;
int setup_location(location* l, char* name)
{
...
Теперь это не работает, потому что
location *crossroads = malloc(sizeof(*crossroads));
выдает ошибку: разыменование указателя на неполноеtype означает, что он может видеть содержимое location.h, но, похоже, он не знает о location.c ...
Я посмотрел вокруг, и все учебники, которые я видел, говорят, чтокомпоновщик свяжет оба файла вместе.
РЕДАКТИРОВАТЬ:
Я изменил код, чтобы включить инициализатор внутри location.c следующим образом:
main.c
...
#include "location.h"
int waste_new_line();
int main()
{
location *crossroads = initialize_location();
....
location.h
typedef struct Location_Struct location;
location* initialize_location();
location.c
...
typedef struct Location_Struct {
int ID;
char *name;
char *description;
} location;
location* initialize_location(location* l)
{
return malloc(sizeof(location));
}
...
Этопо-прежнему выдает ту же ошибку, но только когда я пытаюсь получить доступ к членам перекрестка, используя:
crossroads->description
, это приведет к отклонению в неполный тип ошибка.
РЕДАКТИРОВАТЬ 2: сейчас я решилпросто поместить определение структуры в заголовочный файл ...