Вы определяете несколько раз одно и то же.
Вы можете распределить его по нескольким заголовочным файлам, просто убедитесь, что перед тем, как будет определена структура _A, виден какой-то B.
Этот код работает:
#include <stdio.h>
typedef struct _B B;
typedef struct _A A;
struct _A {
double a;
B *b;
};
struct _B {
int c;
};
void function_do_something(A* a, B* b)
{
printf("a->a (%f) b->c (%d)\n", a->a, b->c);
}
int main()
{
A a;
B b;
a.a = 3.4;
b.c = 34;
function_do_something(&a, &b);
return 0;
}
Выход:
> ./x
a->a (3.400000) b->c (34)
РЕДАКТИРОВАТЬ : обновлено для C
РЕДАКТИРОВАТЬ 2 : разбить на несколько файлов заголовков
b.h:
#ifndef B_H
#define B_H
struct _B {
int c;
};
#endif
хиджра:
#ifndef A_H
#define A_H
typedef struct _B B;
struct _A {
double a;
B *b;
};
typedef struct _A A;
#endif
main.c:
#include <stdio.h>
#include "a.h"
#include "b.h"
void function_do_something(A* a, B* b)
{
printf("a->a (%f) b->c (%d)\n", a->a, b->c);
}
int main()
{
A a;
B b;
a.a = 3.4;
b.c = 34;
function_do_something(&a, &b);
return 0;
}