So I’m morelikely running in a cross reference issue in C
Hello, (I couldnt write it in first for some reason)
Basicly this code:
structA.h:
#pragma once
#include "structB.h"
typedef struct
{
B b;
}A;
structB.h:
#pragma once
#include "structA.h"
typedef struct
{
int field;
}B;
void func(A* a);
structB.c:
#include "structB.h"
void func(A* a)
{
}
Produce the follwing errors on VC2010:
structa.h(7): error C2016: C requires that a struct or union has at
least one member structa.h(7): error C2061: syntax error : identifier
‘B’ etc
so since I only have a pointer to A in func(A* a) I try doing a forward declaration like this:
#pragma once
typedef struct A;
typedef struct
{
int field;
}B;
void func(A* a);
and I add #include “structA.h” in structB.c
However this doesnt work, to fix it I have to change the param of func(A* a) to func(struct A* a) in prototype and implementation…
But in this case i lose the purpose of typedef-ing my structs…
I know i could simply move the function to another file, but the function is related to my structure so I’d like to keep the prototype in the same file than my struct.
Now maybe thats not a good way to do thing in C, i’m mostly used to C++ so i tend to think in C++ when doing C wich is often problematic…
Does someone know a workaround? Thank you very much.
How did this even compile? — Correctly: