Q: How can I define a pair of mutually referential structures? I tried
	typedef struct {
		int afield;
		BPTR bpointer;
	} *APTR;
	typedef struct {
		int bfield;
		APTR apointer;
	} *BPTR;
but the compiler doesn't know about
BPTR
when it is used in
the first structure declaration.
A: As in question 1.14, the problem lies not in the structures or the pointers but the typedefs. First, give the two structures tags, and define the link pointers without using typedefs:
	struct a {
		int afield;
		struct b *bpointer;
	};
	struct b {
		int bfield;
		struct a *apointer;
	};
The compiler can accept the field declaration struct b *bpointer
within struct a,
even though it has not yet heard of
struct b.
(struct b is
``incomplete''
at that point.)
Occasionally it is necessary to precede this couplet with the
empty declaration
struct b;to mask the declarations (if in an inner scope) from a different struct b in an outer scope.
After declaring the two structures using struct tags, you can then declare the typedefs separately:
typedef struct a *APTR; typedef struct b *BPTR;
Alternatively, you can define the typedefs before the struct definitions[footnote] , in which case you can use them when declaring the link pointer fields:
	typedef struct a *APTR;
	typedef struct b *BPTR;
	struct a {
		int afield;
		BPTR bpointer;
	};
	struct b {
		int bfield;
		APTR apointer;
	};
See also question 1.14.
References:
K&R2 Sec. 6.5 p. 140
ISO Sec. 6.5.2.3
H&S Sec. 5.6.1 p. 132