struct A {...}; // creates the type "A"
A s1; // creates an object of type A;
typedef A B; // creates the type "B" as an alias of "A"
B s2; // creates an object of type B (or A, they are the same)
You're allowed to create a type and its alias simultaneously:
1 2 3
typedefstruct A {...} B; // creates two aliased types "A" and "B"
A s1;
B s2; // same as A s2;
You're allowed to create a type and construct an array of objects of that type simultaneously:
struct A {...} array[3]; // creates the type A and constructs an array of three As
But you can't create a type, create a type alias, and construct an array of objects of that type all on the same line.