"Ez mitől jobb megoldás?"
Az a konvencióm, hogy minden adattípust valamelyik headerben deklarálom, és az adattípus használatához egyedül a header includeolása legyen szükséges. Ez vonatkozik a headerekben levő deklarációkra is, vagyis ha én az a.h-ban a B struktúrát akarom használni, akkor ne kelljen explicit megadnom egy forward deklarációt az a.h-ban, hanem a b.h includeolásával legyen elérhető a B struktúra. Mivel egymásra hivatkoznak, ezért mindenképp kell forward declaration, de inkább legyen a struct B; sor a b.h-ban, mint az a.h-ban.
"Az a vicces, hogy minden mókolás nélkül is lefordul, pedantic-kal meg minden. Egyelőre nem is értem, hogy miért és hogy."
Na akkor itt jön az, hogy én msvc-vel próbálom lefordítani, te meg gcc-vel fordítottad. Tehát most már azt is tudjuk, hogy fordítófüggő a hiba. :)