Algunos encabezados se incluyen dentro de otros.
No puedo resolver el siguiente problema:
//foo.h
#ifndef FOO_H
#define FOO_H
#include "BAR.h"
#include "foos/foo_bazz.h"
typedef struct
{
...
} FOO;
// AQUÍ TENGO LA LLAMADA foo_baz(foo, bar);
void
foo_bar(FOO *foo, BAR *bar);
#endif /* FOO_H */
//bar.h
#ifndef BAR_H
#define BAR_H
typedef struct
{
...
} BAR;
#endif /* BAR_H */
//foos/foo_bazz.h
#ifndef FOO_BAZZ_H_
#define FOO_BAZZ_H_
#include "FOO.h"
#include "BAR.h"
void
foo_baz(FOO *foo, BAR *bar);
#endif /* FOO_BAZZ_H_ */
Por lo que aparece un error como este:
foos/foo_bazz.h: error: unknown type name ‘FOO’; did you mean ‘FOO_H_’?
16 | FOO *foo,
| ^~~~
| FOO_H_
He intentado eliminar #include "FOO.h"
y agregar typedef struct FOO;
o typedef struct FOO FOO;
en foos/foo_bazz.h
, pero no ha habido cambios…
También he intentado hacer lo contrario, declarar la función en FOO.h
, pero el resultado es el mismo.
Por favor, ayúdame. Gracias.
davy.ai
Parece que el error es causado por la función
foo_baz
enfoos/foo_bazz.h
sin reconocer la estructuraFOO
deFOO.h
. Una solución podría ser declarar la estructuraFOO
enfoos/foo_bazz.h
antes de la funciónfoo_baz
. Puede hacer esto agregandostruct FOO;
antes de la declaración de la función:Esto le indica al compilador que
FOO
es una estructura que existe en algún lugar, pero no necesariamente donde está definida.Otra opción sería incluir
FOO.h
enfoos/foo_bazz.c
, donde se implementa la funciónfoo_baz
, en lugar de en el archivo de encabezado.De esta forma,
FOO.h
solo se incluye donde se necesita y no en cada archivo que usafoos/foo_bazz.h
.